6.6. Perte des identifiants

En cas de perte des identifiants du « super-utilisateur » de la base, la solution la plus simple consiste à utiliser les paramètres d'authentification de debian-sys-maint que l'on trouvera dans le fichier /etc/mysql/debian.cnf et de changer celui du « super-utilisateur » avec :

SET PASSWORD FOR 'dbadmin'@'localhost' = PASSWORD('nouveaumotdepasse');

Une autre solution, plus portable (la solution précédence ne fonctionne que sur Ubuntu/Debian), consiste à démarrer le serveur avec un fichier SQL d'initialisation dans lequel nous mettrons la commande ci-dessus. Ce fichier d'initialisation sera exécuté sans aucune restriction de droit.

root@ubuntu:~# invoke-rc.d mysql stop
 * Stopping MySQL database server mysqld                                  [ OK ] 
root@ubuntu:~# echo "SET PASSWORD FOR 'dbadmin'@'localhost' = PASSWORD('nouveaumotdepasse');" > /root/resetpass.sql
root@ubuntu:~# mysqld_safe --init-file=/root/resetpass.sql &
[1] 7036
root@ubuntu:~# Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[7075]: started

root@ubuntu:~# invoke-rc.d mysql restart
 * Stopping MySQL database server mysqld                              
STOPPING server from pid file /var/run/mysqld/mysqld.pid
mysqld_safe[7141]: ended
                                                                          [ OK ]
 * Starting MySQL database server mysqld                                  [ OK ] 
 * Checking for corrupt, not cleanly closed and upgrade needing tables.
[1]+  Done                    mysqld_safe --init-file=/root/resetpass.sql
root@ubuntu:~# mysql -u dbadmin -p
Enter password: xxxx
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.0.38-Ubuntu_0ubuntu1-log Ubuntu 7.04 distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Le dernière solution consiste à démarrer mysql avec les options --skip-grant-tables et --user=root, de se connecter à la base avec mysql puis de changer le mot de passe. L'option --skip-grant-tables demande au serveur de ne pas tenir compte des tables d'authentification. Il fait noter que cette méthode est dangereuse et ne devra être utilisée qu'en dernier recours après avoir supprimé toute autre possibilité d'accès à la base (en filtrant, en stoppant Apache, en coupant SSH, etc...).