Récupérer une base de données MySQL
Vous venez de supprimer votre base de données ou vous avez été victime d’un piratage et vous avez perdu l’ensemble de vos données. Pas de panique ! Il est possible de reconstituer complètement votre base de données MySQL depuis les logs binaires de cette dernière.
Le log binaire a remplacé l’ancien système de log de MySQL. Depuis la version 5 de ce serveur de bases de données OpenSource, les logs textes ne sont plus disponibles.
Les logs contiennent l’ensemble des modifications (suppressions, modifications et ajouts d’informations, création de base de données, de tables, etc.) qui sont appliquées à votre serveur.
Ainsi, les logs (comme l’ancien système de log) contient toutes les requêtes qui modifient les données dans vos bases. Il est donc concevable en executant l’ensemble des requêtes contenues dans les fichiers binaires, de pouvoir reconstituer complétement vos bases, tables et données comprises.
L’utilitaire mysqlbinlog permet de lire le fichier binaire et d’en extraire, dans un format lisible, les informations permettant de reconstituer votre base de données.
Ainsi, en executant la commande suivante vous pouvez directement executer les requêtes contenues dans le fichier de log.
mysqlbinlog /var/log/mysql/mysql-bin.000001 |mysql -u root -p
Par contre, si vous aviez malencontresement supprimé une table (DROP TABLE toto;), vos logs vont contenir la ligne en question et la commande précédente va également supprimer votre table. Il faut donc dans un premier temps extraire les requêtes dans un fichier temporaire afin de l’éditer et de supprimer la requête maudite.
mysqlbinlog /var/log/mysql/mysql-bin.000001 > temp.sql
Vous pouvez, ensuite, réinjecter le fichier dans votre base
cat temp.sql |mysql -u root -p
Vous pouvez également, si vous avez plusieurs fichiers de log binaire dans un repertoire, écrire un petit script en shell qui va automatiser la construction de votre fichier temporaire.
#!/bin/bash
for i in $( ls /var/log/mysql ); do
mysqlbinlog /var/log/mysql/$i >> temp.sql
done
Attention, cette méthode de récupération de fonctionnera que dans le cas où l’ensemble des informations de construction de la bases, des tables et des insertions de données sont loguées dans les fichiers. Si vous avez nettoyé, à un moment ou un autre (pour faire de la place par exemple), vos logs, vous ne pourrez sans doute pas reconstituer vos informations à moins d’en avoir une sauvegarde qui vous permette de réinjecter les requêtes comprisent entre la date de la sauvegarde et celle de l’incident.
November 10th, 2008 at 5:03 pm
Cet ebook peut aussi aider http://www.dafotec.fr/livre-blanc-recuperation-de-donnees.pdf
November 10th, 2008 at 11:12 pm
Oui mais c’est peur ceux qui, comme moi, on la flemme de démonter un DD qui qu’il faut (en plus) aller chercher aux US.
Ma technique, lorsque le système est ok, nécessite uniquement un accès SSH sur la machine.