====== Mot de passe de root perdu sur myQSL ======
===== Symtôme =====
Jusque là, tout allait bien, mais un beau jour... Ça commence souvent par un message de connexion impossible lorsqu'on tente de se connecter en tant que //root// à mySQL à travers //phpmyadmin//. La première chose à faire est de mettre hors de cause //phpmyadmin//, en se connectant à mySQL en ligne de commande (dans un terminal):
mysql -u root -p
après saisie de votre mot passe de //root// (de mySQL), le message suivant :
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
confirme la perte du mot de passe de //root//.
L'utilisatrice //root// de mySQL n'est pas l'utilisatrice //root// de Linux. Elles peuvent avoir des mots de passe différents.
===== Réinitialisation du mot de passe =====
La technique utilisée est de lancer mySQL dans un mode particulier, permettant de se connecter sans vérifier les identités. Voici le liste de commandes à passer (les "%%//%%" et le texte qui le suit ne doit pas être saisi, c'est un commentaire !) :
$ sudo -s // passer en mode superutilisattrice de Linux
# /etc/init.d/mysql stop // arrêter le serveur mySQL
# /usr/sbin/mysqld --skip-grant-tables --skip-networking & // lancer le serveur mySQL en mode "sans contrôle"
# mysql -u root // se connecter ne tant que root de mySQL (pas de contrôle)
mysql> USE mysql // on utilise la base contenant les mots de passe
mysql> UPDATE user SET Password = PASSWORD('mot_de_passe') // on indique le nouveau mot de passe, sur deux lignes
mysql> WHERE Host = 'localhost' AND User = 'root'; // fin de la ligne, indiquée par le ";"
mysql> FLUSH PRIVILEGES; // pour s'assurer que la modification sera bien prise en compte
mysql> quit // on a fini avec mySQL
# /etc/init.d/mysql stop // arrêter mySQL
# /etc/init.d/mysql start // le relancer en mode normal
# exit // abandonner le mode superutilisatrice (de linux)
Alternative pour CentOS et les RedHat-like
mysqld_safe --skip-grant-tables &
mysql --user=root mysql
update user set Password=PASSWORD('new-password') where user='root';
flush privileges;
exit;
Il ne reste qu'à vérifier que ça a servi à quelque chose :
$ mysql -u root -p
On ne devrait plus avoir le message d'erreur vu à la section précédente.