Par un bon jour, vous ne vous souvenez plus de votre mot de passe root de
votre DB MySQL ou bien, plus dramatique, mysqld ne trouve pas la table
“host.frm” (cas fréquent).

Mais voila, pour recréer host.frm, il faut démarrer mysqld.
Comment faire alors ?

Et bien tout simplement en demandant à MySQL de ne pas lire la table
d'authentification.

# /usr/local/libexec/mysqld -u mysql --skip-grant
   040927 23:31:32  InnoDB: Started
   /usr/local/libexec/mysqld: ready for connections.
   Version: '4.0.20'  socket: '/tmp/mysql.sock'  port: 3306

Ouvrez un autre shell, vous pouvez accéder à la DB sans mot de passe.

# mysql
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 62 to server version: 4.0.20

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

mysql> DELETE FROM mysql.user WHERE User='root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'm0n_JoL1_MoT_d3_p4ss3' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

Déconnectez vous, arrétez le daemon sur votre autre terminal.
Vous pouvez relancer mysql normalement (vérifiez que l'option -skip-grant n'est plus actif) :

 # /usr/local/etc/rc.d/mysql-server.sh start

Et voila ! Soumission d'un MySQL relou en 2 minutes.

unix/mysql_et_probleme_d_authenfication.txt · Last modified: 2010/01/12 13:29 (external edit)