07 juin 2013

MySQL setup

Voici un rapide mémo pour la configuration de base de MySQL.

Avec Fedora on installe et démarre MySQL en 3 commandes (en root) :
 # yum install mysql-server
 # systemctl start mysqld
 # systemctl enable mysqld


Par défaut MySQL attend les connexions sur le port 3306. Pour changer cette valeur éditer le fichier /etc/my.cfg et ajouter (ou modifier) le paramètre 'port' dans la section [mysqld]
[mysqld]
port=1234
Puis redémarrer
 # systemctl restart mysqld

Notes:
- Dans ce qui suit "www.example.com" està remplacer par le nom de votre serveur.
- On va utiliser le user root de MySQL mais ce n'est pas le root du serveur. 

- Ce qui suit peut être fait par n'importe quel utilisateur.

> mysql -u root
 

-- etape 1: lister les users existants:

mysql> select user,host,password from mysql.user;
+------+-----------------+----------+
| user | host            | password |
+------+-----------------+----------+
| root | localhost       |          |
| root | www.example.com |          |
| root | 127.0.0.1       |          |
| root | ::1             |          |
|      | localhost       |          |
|      | www.example.com |          |
+------+-----------------+----------+


-- etape 2: supprimer les users inutiles:

mysql> delete from mysql.user where user='root' and host='::1';
mysql> delete from mysql.user where user='';

mysql> select user,host,password from mysql.user;
+------+-----------------+----------+
| user | host            | password |
+------+-----------------+----------+
| root | localhost       |          |
| root | www.example.com |          |
| root | 127.0.0.1       |          |
+------+-----------------+----------+


-- etape 3: donner un mot de passe au user root de MySQL:

mysql> set password for root@localhost=password('secret');
mysql> set password for root@'127.0.0.1'=password('secret');
mysql> set password for root@'www.example.com'=password('secret');

mysql> select user,host,password from mysql.user;
+------+-----------------+-------------------------------------------+
| user | host            | password                                  |
+------+-----------------+-------------------------------------------+
| root | localhost       | *14E65567ABDB5135D0CFD9A70B3032C179A49EE7 |
| root | www.example.com | *14E65567ABDB5135D0CFD9A70B3032C179A49EE7 |
| root | 127.0.0.1       | *14E65567ABDB5135D0CFD9A70B3032C179A49EE7 |
+------+-----------------+-------------------------------------------+


La valeur de la colonne 'password' change suivant le mot de passe. Ici on voit le codage de 'secret'.

-- pour autoriser root à se connecter à MySQL via le réseau :

mysql> update mysql.user set host="%" 
       where user="root" and host="www.example.com";
mysql> flush privileges;


mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *14E65567ABDB5135D0CFD9A70B3032C179A49EE7 |
| root | %         | *14E65567ABDB5135D0CFD9A70B3032C179A49EE7 |
| root | 127.0.0.1 | *14E65567ABDB5135D0CFD9A70B3032C179A49EE7 |
+------+-----------+-------------------------------------------+


mysql> quit

ATTENTION:
% matche tout host, sauf localhost !
Donc l'entrée avec localhost n'est pas redondante avec l'entrée %

On se reconnecte et là il faut utiliser l'option -p puisque root a maintenant un mot de passe.
>mysql -u root -p
Enter password:    <-- entrer le mot de passe ('secret' dans notre example)

-- utiliser MySQL
mysql> quit


Après cela on peut tout faire en ligne de commande, avec phpMyAdmin ou MySQL Workbench.