====== Installation & configuration de MySQL ======
Cette page est peut-être obsolète !
MySQL a été remplacé par MariaDB.
Cette page explique les différentes étapes pour installer et configurer le serveur de base de données : [[http://dev.mysql.com/downloads/mysql/|MySQL]] sous une Slackware.
===== 1. Récupération du paquet =====
Le paquet peut être obtenu à partir du CD-ROM, il se situe dans le répertoire ''ap/''. Ou à partir d'un serveur FTP, comme par exemple, ftp://ftp.gwdg.de/pub/linux/slackware/
Je vous conseille de vérifier auparavant le fichier ''ChangeLog.txt'', pour savoir si il existe une mise à jour.
===== 2. Configuration =====
Dans un premier temps, il faut s'assurer, que le fichier ''rc.mysqld'' est présent dans le répertoire ''/etc/rc.d/'' ((Se renseigner pour les autres distributions)).
==== 2.1. Création d'une base de données ====
Pour pouvoir créer une base de données, il faut être soit, le super utilisateur (**root**) soit, l'utilisateur **mysql** (par défaut, il n'existe pas).
Par conséquent on va avoir besoin de se connecter en root, car l'installation nécessite « d'écrire » sur le système. Ensuite on lance la commande ci-dessous.
mysql_install_db --user=mysql
La base de données va être initialisée par l'utilisateur **mysql** (root ne doit en aucun cas avoir tous les droits).
===== 3. Gestion des comptes =====
À ce stade, il existe déjà des comptes, mais il est préférable de sécuriser un peu l'installation.
Pour administrer le serveur, il va falloir nous connecter, nous allons donc lancé le //daemon//.
sh /etc/rc.d/rc.mysqld start
Starting mysqld daemon with databases from /var/lib/mysql
==== 3.1. Un seul compte root ====
Pour l'instant la table ''user'' possède plusieurs comptes root, sans mot de passe, nous allons donc faire le ménage.
On se connecte à la base de données
mysql -u root mysql
ou
mysql -u root
mysql> USE mysql;
Ici aucun mot de passe est nécessaire, car le champ dans la table ''user'' est vide.
On peut regarder les différents comptes root (ma machine s'appelle aloha).
mysql> SELECT Host,Password,User FROM user WHERE User='root';
+-----------+------+----------+
| Host | User | Password |
+-----------+------+----------+
| localhost | root | |
| aloha | root | |
+-----------+------+----------+
On s'aperçoit qu'il existe deux comptes root, nous allons en conserver un seul. On va garder uniquement celui dont l'hôte est ''localhost''.
mysql> DELETE FROM user WHERE User='root' AND Host='aloha';
Query OK, 1 row affected (0,01 sec)
mysql> SELECT Host,Password,User FROM user WHERE User='root';
+-----------+------+----------+
| Host | User | Password |
+-----------+------+----------+
| localhost | root | |
+-----------+------+----------+
Désormais il existe un seul compte root, il ne reste plus, qu'à lui donner un mot de passe.
mysql> UPDATE user SET Password=PASSWORD('rootpass') WHERE User='root' AND HOST='localhost';
Query OK, 1 row affected (0,01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT Host,Password,User FROM user WHERE User='root';
+-----------+------+-------------------------------------------+
| Host | User | Password |
+-----------+------+-------------------------------------------+
| localhost | root | *7428814AQ4258YND4589MLG45821656XGT45JLR4 |
+-----------+------+-------------------------------------------+
Il faut remplacer ''rootpass'' par un véritable mot de passe.
Il reste plus qu'à purger les tables de droits (force l'écriture sur le disque dur).
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0,00 sec)
Pour vérifier, que nos modifications ont été prises en compte, on peut se déconnecter.
mysql> QUIT;
Bye
==== 3.2. Les comptes anonymes ====
Il existe encore des comptes, en utilisateur anonyme cet fois-ci. On va également les supprimer.
Il faut se connecter en utilisateur root ((Celui qui administre le serveur de base de données)).
mysql -u root -p
mysql> USE mysql;
Database changed
mysql> SELECT Host,User,Password FROM user WHERE User='';
+-----------+------+----------+
| Host | User | Password |
+-----------+------+----------+
| aloha | | |
| localhost | | |
+-----------+------+----------+
mysql> DELETE FROM user WHERE User='';
Query OK, 2 rows affected (0,00 sec)
mysql> SELECT Host,User,Password FROM user WHERE User='';
Empty set (0,00 sec)
mysql> FLUSH PRIVILEGES;
L'étape suivante va consister à initialiser un compte pour un utilisateur.
==== 3.3. Création d'un utilisateur ====
Nous allons tout d'abord mettre en place une base de données spécifique à cet utilisateur.
mysql> CREATE DATABASE nom_bdd;
Query OK, 1 row affected (0,00 sec)
Généralement je fais correspondre le nom de la base (''nom_bdd'') avec le login de l'utilisateur (c'est plus facile pour s'en souvenir).
Dans mon cas ça donne ceci :
mysql> CREATE DATABASE olivier;
Query OK, 1 row affected (0,00 sec)
On peut voir toutes les bases de données avec cette commande.
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| olivier |
| test |
+--------------------+
4 rows in set (0,00 sec)
''olivier'' est ma base personnelle.
Pour ajouter les identifiants de connexion, il suffit d'ajouter une nouvelle //ligne// dans la table ''user''.
mysql> INSERT INTO user (Host,User,Password) VALUES ('localhost','le_login',PASSWORD('mot_de_passe'));
ou
mysql> INSERT INTO user SET Host='localhost',User='le_login',Password=PASSWORD('mot_de_passe');
Ensuite, nous allons lui accorder des privilèges pour sa base de données.
mysql> FLUSH PRIVILEGES;
mysql> GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, SELECT, UPDATE ON nom_bdd.* TO 'le_login'@'localhost' IDENTIFIED BY 'mot_de_passe';
Vous pouvez bien sur accorder moins de privilèges.
===== 4. Simplifier la connexion =====
Vous vous peut êtes rendu compte que s'est assez lourd à chaque fois de taper cette commande ''mysql -u votre_login -p'', on peut la réduire, sans passer par un script shell « maison » il suffit de copier dans votre espace personnel le fichier ''/etc/my-small.cnf'' (ou ''/etc/my.cnf'') et le renommer en ''.my.cnf''. Il faut repérer la ligne commençant par ''[client]'' et apporter ces modifications.
[client]
user = le_login
password = mot_de_passe
database = nom_bdd
port = 3306
socket = /var/run/mysql/mysql.sock
Désormais pour se connecter, il suffira simplement de taper ''mysql''. Par ailleurs, vous pouvez utiliser ce fichier, avec n'importe quels langages de programmation conforment à l'API MySQL, grâce à l'option ''defaults-file''.
===== 5. Un daemon de plus au démarrage =====
Pour que le serveur MySQL soit activé à chaque démarrage, Il faut rendre le fichier ''/etc/rc.d/rc.mysqld'' exécutable:
su root
chmod a+x /etc/rc.d/rc.mysqld
**Remarque :** Ce n'est pas une obligation de lancer le daemon à chaque fois, surtout, si on l'utilise occasionnellement.