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