Table des matières
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.
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.