Restaurer votre database SQL à partir des fichiers *.frm, *.MYD et *.MYI

Aujourd’hui j’ai eu la bonne surprise de voir que MAMP (Macintosh, Apache, Mysql and PHP) était mort. Lorsque je démarrais mon serveur,  j’avais cette erreur : “Error could not connect to mysql server” sur la page d’accueil du serveur, accompagnée de celle-ci :

/Applications/MAMP/Library/bin/mysqlcheck: Got error: 1045: Access denied for user ‘root’@’localhost’ (using password: YES) when trying to connect (au démarrage de l’application).

Après quelques recherches, c’est visiblement tout à fait réparable, il suffit de changer le mot de passe du serveur MySQL à quelques endroits dans MAMP en suivant ces tutos par exemple :

Cependant, dans mon cas, j’ai évidement oublié le mot de passe de base, donc impossible de le changer (enfin j’ai essayer toutes ma panoplie habituelle, mais aucun n’a pas marché : autre problème de MAMP, ou trou de mémoire, nul ne le sait …)

Seule possibilité restante ; restaurer la BD avec les fichiers auxquels j’ai toujours accès. MAMP stocke votre BD dans MAMP/db/mysql. Chaque table comporte 3 fichiers dont l’extension est peu connue ;

  • *.frm : la structure de votre table
  • *.MYD : les données de la table
  • *.MYI : les indices (permettant notamment la réparation de la table).

Grâce à ses 3 fichiers, vous pouvez récupérer toutes les tables. Par précaution, je n’ai pas viré MAMP de suite, j’ai pris ma Virtual Machine, et fait les opérations suivantes ;

  1. Copier le repertoire représentant votre BD dans celui du serveur MySQL de la VM
    $ sudo cp -r myDB/ /etc/lib/mysql
  2. Ensuite,  par sureté, assurez vous que mysql ait les droits d’accès
    $chown -R mysql.mysql /var/lib/mysql
  3. Finalement, redémarrez votre serveur MySQL
    $ /etc/init.d/mysql restart

Vous pouvez maintenant allez dans le PHPMyAdmin de votre VM, et faire un mysqldump digne de ce nom !

A l’avenir, pensez donc, comme moi, à faire des sauvegardes de vos databases, on n’est jamais trop prudent 😉