Voici comment prendre en main un serveur MySQL. Je m’adresse à ceux qui savent ce qu’est une base, une table… et qui souhaitent gérer eux-mêmes leur hébergement.
Ce tutoriel est tenu à jour régulièrement. Dernière révision : 7 mars 2015.
Les commandes préfixées d’un # sont à lancer en root. Les commandes préfixées d’un % sont à lancer en simple utilisateur.
On commence par installer MySQL :
# apt-get install mysql-server mysql-client
À adapter selon votre distribution : yum install pour CentOS, etc.
Changer le mot de passe root quand on a l’ancien :
% mysql -p -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
[blabla]
mysql> SET password FOR 'root'@'localhost' = password('_Nouveau_mdp_');
Quand je dis mot de passe root, je parle de celui de MySQL bien entendu, pas de celui du système. On peut aussi faire :
% mysqladmin -p -u root password _Nouveau_mdp_
Mais je déconseille cette méthode, parce qu’on spécifie le nouveau mot de passe sur la ligne de commande. D’une part, si vous avez un historique des commandes, il faudra aller effacer la ligne. D’autre part, si d’autres personnes ont un accès shell sur le système, un ps aux au mauvais moment peut faire mal.
Les deux méthodes ci-dessus s’appliquent également pour les utilisateurs autres que root.
Changer le mot de passe root quand on l’a perdu :
# service mysql stop
# mysqld --skip-grant-tables --skip-networking &
# mysql -u root
mysql> SET password FOR 'root'@'localhost' = password('_Nouveau_mdp_');
# service mysql stop && service mysql start
Importer une BD :
% mysql < BDD.sql -p -u root
Exporter une BD :
% mysqldump -p -u root _Nom_base_ > BDD.sql
Par défaut, lors d’un export MySQL n’inclue pas les commandes CREATE DATABASE et USE en début de fichier. Ça s’explique parce que souvent en mutualisé on ne peut pas modifier les bases, mais ça oblige à créer la base manuellement quand on importe le fichier sur un autre système. Pour avoir un export pratique d’une base, on peut rajouter en début de fichier :
CREATE DATABASE _Nom_base_; USE _Nom_base_;
Afficher des stats :
% mysql -p -u root
mysql> SHOW PROCESSLIST;
mysql> SHOW DATABASES ;
mysql> SHOW STATUS WHERE Variable_name LIKE '%connect%';
J’ai l’habitude de changer l’alias de phpMyAdmin. Par défaut on y accède avec une URL du style « http://serveur/phpmyadmin ». Bien entendu, il faut configurer correctement l’accès de vos services, mais deux précautions valent mieux qu’une : un utilisateur peut toujours compromettre une machine du réseau local, il y aura toujours des 0day, etc… Je ne dis pas que changer un port et/ou une URL arrêtera un attaquant déterminé, mais ça écarte déjà une partie des scans automatiques. Si vous souhaitez changer cet alias, éditez /etc/phpmyadmin/apache.conf et modifiez la première ligne :
Alias /_Nouvel_alias_ /usr/share/phpmyadmin
Si vous souhaitez que les utilisateurs non root aient un lien dans l’interface pour supprimer une base (quand ils en ont les droits), éditez /usr/share/phpmyadmin/libraries/config.inc.php pour modifier cette ligne :
$cfg['AllowUserDropDatabase'] = true;