MySQL : Installation et configuration
Contents
1 Introduction
MySQL est un serveur de bases de données relationnelles SQL développé dans un souci de performances élevées. Il est multi-thread, robuste et multi-utilisateurs. C'est un logiciel libre développé sous double licence en fonction de l'utilisation qui en est faite: dans un produit libre (open-source) ou dans un produit propriétaire. Dans ce dernier cas, la license est payante, sinon elle est libre.
2 Installation
Pour l'installer, rien de plus simple :
apt-get install mysql |
3 Utilisation
Je conseil fortement un petit utilitaire MySQL intégré de base pour configurer de façon simple et sécurisée MySQL. C'est parti :
Faites juste "Entrée", car il n'y a pas de mot de passe par défaut
OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n]
Répondez "y" et changez le mot de passe
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n]
Répondez "y" pour supprimer les utilisateurs anonymes
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n]
Répondez "y" pour ne pas autoriser root à se connecter à distance
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n]
Répondez "y" pour supprimer la base de test
Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n]
Et enfin répondez "y" pour recharger les privilèges des tables
Cleaning up... All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL!
Tout est terminé, vous pouvez maintenant utiliser votre base.
3.1 Création d'une base de donnée
Pour créer une base de donnée, voici la commande a effectuer :
create database nom_de_la_base; |
3.2 Création d'un utilisateur
Pour créer un utilisateur :
3.3 Changer le mot de passe d'un utilisateur
Pour changer le mot de passe d'un utilisateur, c'est simple :
mysql |
SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('newpass'); |
Cette commande intègre le flush privileges, donc pas besoin de la taper par la suite :-)
3.4 Modifier les droits d'un utilisateur
Si par exemple, je souhaite changer le hostname de connexion de tous les utilisateurs :
UPDATE mysql.USER SET host = '10.0.0.%' WHERE host = 'localhost' AND USER != 'root'; UPDATE mysql.db SET host = '10.0.0.%' WHERE host = 'localhost' AND USER != 'root'; FLUSH PRIVILEGES; |
3.5 Supression d'un utilisateur
Avant de supprimer un utilisateur, il est conseillé de lister les privilèges, afin de révoquer des droits actuels :
SHOW grants FOR <user>; |
Puis on révoque :
REVOKE ALL privileges FROM <user>; |
Et enfin, on supprime l'utilisateur :
DROP USER 'user'@'localhost'; |
3.6 Lister les process en cours
3.7 Renommer une base de données
Lancez ce script et il renommera table par table pour enfin créer la nouvelle database. C'est la méthode recommandée par MySQL.
3.8 Connaître la taille d'une base de données
pour obtenir la taille de toutes les bases de données en Mo :
mysql |
SELECT table_schema,round(SUM(data_length+index_length)/1024/1024,4) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema; |
Si l'on souhaite la taille d'une table uniquement, il faudra préciser le nom de cette dernière (champ table_name), ainsi que le nom de la base de données (champ table_schema) :
mysql |
SELECT table_schema,round(SUM(data_length+index_length)/1024/1024,4) FROM information_schema.TABLES WHERE table_schema = 'mysql' AND TABLE_NAME = 'user'; |
4 Se connecter avec des identifiants par défaut
Il peut être utile de pouvoir se connecter de façon simple sans avoir à entrer ses identifiants. Voici une méthode très simple qui consiste à entrer dans votre home un fichier contenant ces identifiants :
~/.my.cnf |
[client] user=root password=password |
Appliquez ensuite les bons droits :
chmod |
chmod 600 ~/.my.cnf |
Connectez vous sans identifiants :-)
5 FAQ
5.1 Comment resetter son mot de passe root quand on l'a perdu ?
Have you ever forgotten the root password on one of your MySQL servers? No? Well maybe I’m not as perfect as you. This is a quick h00tow (how to) reset your MySQL root password. It does require root access on your server. If you have forgotten that password wait for another article :
First things first. Log in as root and stop the mysql daemon. Now lets start up the mysql daemon and skip the grant tables which store the passwords.
mysqld_safe |
mysqld_safe --skip-grant-tables --skip-networking & |
You should see mysqld start up successfully. If not, well you have bigger issues. Now you should be able to connect to mysql without a password.
mysql |
$ mysql --user=root mysql update user set Password=PASSWORD('new-password') WHERE user = 'root'; flush privileges; exit; |
Now kill your running mysqld, then restart it normally. You should be good to go. Try not to forget your password again.
5.2 Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist
Si vous obtenez ce genre de message au boot de mysql :
Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist
Vous devez recontruire les bases manquantes comme ceci :
mysql_install_db --user=mysql --ldata=/new-data-location mysqld_safe --datadir=/new-data-location --user=mysql & |
6 Ressources
Optimising MySQL under Sun
MySQL Utils : des beaux graphs cacti pour Monitorer MySQL
Setting Changing And Resetting MySQL Root Passwords
Monolith-toolkit : outils faciles pour l'administration complexe de MySQL