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