Mot de passe root et MySQL…

Il est recommandé de changer le mot de passe de l’utilisateur « root » de MySQL après l’installation. Je ne sais pas si vous remarquez : ça laisse une trace sur votre système et j’ai essayé mais il ne semble pas possible de changer le mot de passe avec mysqladmin sans taper le mot de passe dans la ligne de commande avec 5.1 :

mysqladmin -u root -h localhost 
--password=root password root
mysqladmin -u root -h <hostname>
--password=root password root

L’autre idée, c’est d’utiliser la commande grant comme ci-dessous :

mysql -u root -p
grant all on *.* to root@localhost
identified by 'root';

Bon le problème c’est que ça laisse une trace dans un autre fichier… .mysql_history de votre utilisateur. Pas de problème, vous pouvez simplement le fichier en espérant que personne ne supervise ce fichier. La bonne nouvelle c’est qu’il faut être administrateur car les droit sur ce fichier sont -rw——- !

La dernière idée, c’est de saisir directement la forme HASH du mot de passe et ainsi d’être plus malin que tout le monde. Pour cela, sur votre machine, tapez :

select password('root');
+-------------------------------------------+
| password('root') |
+-------------------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------------------------------------------+

Sur l’autre machine tapez :

grant all on *.* to root@localhost
identified by password '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B';

Vous me direz, c’est grâce à des idées toujours aussi brillantes qu’il m’arrive ce genre de truc :

J’ai perdu le mot de passe root de MySQL !

Il va falloir arrêter le serveur et le redémarrer. Bien sur, je ne peux pas l’arrêter puisqu’il me faut le mot de passe ! Heureusement, j’ai ma commande magique que je vous recommande de ne *JAMAIS
* utiliser :

ps -ef |grep mysqld| 
awk '{print "kill -9",$2 }'|sh

Une fois que MySQL est arrêté :

  • Redémarrez-le avec l’option « –skip-grant-tables » (Assurez vous que personne ne pourra se connecter pendant cette opération) :
 ./bin/safe_mysqld --skip-grant-tables 
--user=mysql &

  • Connectez-vous avec mysql sous root. Aucun mot de passe est demandé :
mysql -u root@localhost

  • Chargez le dictionnaire avec mysqladmin. Tant que ça n’est pas fait, impossible de changez le mot de passe dans votre session mysql :
mysqladmin flush-privileges

  • Voila, vous pouvez changez le mot de passe de root@localhost depuis votre session mysql :
grant all on *.* to root@localhost
identified by password '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B';
  • Le problème, c’est que comme vous avez lancer safe_mysqld avec l’option skip-grant-tables, si mysqld est tué, il sera redémarré sans mot de passe. Il faut donc arrêter et redémarrer une seconde fois
./bin/mysqladmin -u root -p shutdown
./bin/safe_mysqld --user=mysql &

Bon… J’ai copié le mot de passe du serveur sous mon clavier. Cette fois, je n’aurais plus de problème ! Peut-être que je ne devrais plus utiliser MySQL ?

-Grégory!