Changer le mot de passe perdu MySQL de root

Imaginez le scénario suivant, vous êtes en prod, vous faites une mauvaise manipulation sur l’utilisateur root et BOOM, vous n’avez plus accès à MySQL !!! Moi je l’imagine très bien car ça a été mon cas…

Après avoir paniqué quelques secondes en mode « Oh putain le con !!! », une petite recherche sur Google et je tombe sur la doc MySQL expliquant comment faire… Bon il y a à boire et à manger la dedans, donc voici clairement ce qu’il faut faire pour vous sauver.

Il faut avoir accès à la console du serveur, dans mon cas un SSH sur un serveur Debian (avec les supers pouvoirs du root ou en ‘sudo’)…

On arrête le service MySQL

root@serveur$ /etc/init.d/mysql stop

On lance le service MySQL en mode safe (sans mot de passe), puis après quelques secondes CTRL + C

root@serveur$ mysqld_safe --skip-grant-tables &
160330 16:01:10 mysqld_safe Logging to syslog.
160330 16:01:10 mysqld_safe Starting mysqld daemon with
    databases from /var/lib/mysql

On se connecte à MySQL en ligne de commande

root@serveur$ mysql -u root

Une fois connecter au client, exécuter les requêtes suivantes en remplaçant le mot de passe

mysql> UPDATE mysql.user
    SET mysql.password=PASSWORD("VotreNouveauPassword")
    WHERE mysql.user='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

On affiche les processus en cours et on repère le dernier PID MySQL, ici 15589

root@serveur$ ps -aux
...
mysql    15589  0.7  2.4 685728 51132 pts/3    Sl   16:01
    0:00 /usr/sbin/mysqld --skip-grant-tables
...

On termine le processus 15589

root@serveur$ kill 15589
mysqld_safe --skip-grant-tables &160330 16:04:28 mysqld_safe
    mysqld from pid file /var/run/mysqld/mysqld.pid ended

Et on redémarre le service MySQL en mode normal

root@serveur$ /etc/init.d/mysql start

Si vous n’avez pas eu de problème, vous devriez pouvoir vous reconnecter à votre BDD avec votre nouveau mot de passe. J’ai testé cela sur Linux, mais c’est également valable sur Windows, pour le reste un petit tour sur la doc MySQL.

ATTENTION à ce que vous faite dans en mode ‘safe’… 😉

Comments are closed.