Il y a peu de temps, l'intégralité de ma base de donnée MySQL est devenue hors service et après plusieurs heures d'inspection, le verdict fût sans appel, il faut complètement réinstaller le serveur de bases de donnée.
Malheureusement, la dernière sauvegarde effectuée datait de plus ou moins 9 heures et, ce jour là, il y a eu beaucoup de nouvelles données enregistrées. Dans le billet d'aujourd'hui, je vais me pencher sur la solution (un peu contraignante je vous l'accorde) afin de remettre les données sur la nouvelle installation du serveur SQL.
Nous allons donc particulièrement nous intéresser à deux fichiers (par table), à savoir les extension .frm
et .ibd
.
- l'extension .frm avec MySQL contient l'architecture de la table SQL (un simple CREATE TABLE XXX [...] en quelque sorte)
- l'extension .ibd contient les données de la table.
Prérequis
Afin d'effectuer la récupération des données SQL, il vous faudra :
- avoir fait un backup du datadir MySQL (généralement dans
/var/lib/mysql
) - avoir réinstallé MySQL et s'être assuré que celui-ci fonctionnait correctement.
Installation des outils nécessaire
Nous allons commencer par installer mysql-utilities
qui contient mysqlfrm
. Celui-ci est un outil fort pratique qui va nous permettre de générer le code SQL de chaque table à partir du fichier .frm.
sudo apt install mysql-utilities
C'est parti !
Il vous faut maintenant créer la base de donnée que vous aviez. Ensuite, nous allons commencé par faire la première table afin de s'assurer que la méthode fonctionne bien avec votre installation.
Nous allons maintenant récupérer toute l'architecture SQL de votre base de donnée grâce à la commande suivante:.
mysqlfrm --diagnostic /backup/mysql/base_de_donnee/ > base_de_donnee.sql
Il vous faudra bien entendu adapté le chemin avec celui de votre dossier de backup.
Maintenant que la commande est lancée, vous devriez avoir un fichier SQL avec l'intégralité de l'architecture de votre base de donnée !
On se peut désormais se connecter à MySQL, préférez la ligne de commande via SSH à PHPMyAdmin qui peut selon les versions (Mysql & PMA lui même) faire foirer certaines des commandes.
Donc vous pouvez vous connecter à votre serveur SQL, attention il est important d'avoir tous les pouvoirs donc on utilise root.
mysql -u root-p < base_de_donnee.sql
Et là, l'air de rien, nous avons déjà fait la moitié du chemin :)
Nous devons permettre à SQL d'importer les fichiers .ibd
contenant les données de la table et pour ce faire nous devons lancer la commande suivante :
ALTER TABLE `base_de_donnee`.`table_1` DISCARD TABLESPACE;
Ensuite, nous allons copier notre fichier ibd de la table_1
, comme ceci :
sudo cp /backup/mysql/base_de_donnee/table_1.ibd /var/lib/mysql/base_de_donnee/table_1.ibd
Afin de l'ajouter à la nouvelle installation MySQL.
Désormais il faut que MySQL puisse avoir accès à ce fichier donc nous allons changer les droits :
sudo chown mysql:mysql /var/lib/mysql/base_de_donnee/table_1.ibd
Maintenant que c'est fait, il nous faut intégrer les données contenues dans ce fichier à la base de donnée. Nous passons donc à l'importation avec la commande suivante :
ALTER TABLE `base_de_donnee`.`table_1` IMPORT TABLESPACE;
Et voilà ! Il ne vous reste plus qu'à répéter l'opération sur chaque tables.