====== 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.