Restauration d’une base MySQL à partir des fichiers FRM, MYD et MYI

Suite de la mise à jour de la 5.0, ici : Synology : Nouvelle version majeure du firmware Synology 5.0. J’ai eu la surprise de constater que l’ensemble de mes bases de données MySQL avaient disparues de mon Synology.

Je soupçonne que le problème est dû au fait d’avoir installé le package de MariaDB mais sans en avoir la certitude. En réalité, je n’en sais strictement rien. Le problème n’est d’ailleurs pas critique : les bases de données concernées sont celles de sites web sans évolution récente et avec très peu de de trafic.

J’ai bien des sauvegardes des bases, réalisées au travers d’une synchronisation avec mon deuxième NAS Synology (DS209+) mais celui-ci n’est pas sur place. Je suis obligé d’attendre une semaine avant de pouvoir y avoir accès. Ce qui est un peu long car il n’est jamais bon qu’un site reste trop longtemps hors-ligne. Même si les sites concernés n’ont que peu de traffic, ils référencent d’autres sites, plus importants. Ce qui peut avoir des conséquences collatérales sur leur positionnement SEO vis-à-vis des moteurs de recherche.

Par contre, j’avais mise en place une copie « à plat » automatique des bases de données situées sur mon serveur dans un autre dossier. Le programme de sauvegarde dupliquait régulièrement les fichiers (FRM, MYD et MYI) de mes bases données de mon Synology dans un autre dossier.

Il est donc possible, du moins en théorie de pouvoir récupérer les bases de données. Rappelons pour commencer comment est structurée une base de données MySQL :

Rappel de la structure d’une base de données MySQL :

Une base de données MySQL (avec le moteur MyISAM), c’est :

Un nom de dossier qui porte le nom de la base de données, par exemple « todolist » et qui contient des fichiers avec les extensions :

  • FRM – Ils stockent la structure de la table,
  • MYD – Ils stockent les données,
  • MYI – ils correspondent aux index (facultatifs).

et un fichier OPT qui contient les options de votre base de données.

Donc, en théorie, si vous êtes en possession de l’ensemble de ces fichiers, vous êtes à même de pouvoir récupérer l’intégralité de votre base de données.

État des lieux :

Les bases personnelles Mysql d’un Synology sont stockées dans le dossier « /volume1/@database/mysql ».

Mes fichiers de sauvegarde sont dans le dossier « /volume1/copie_bases/@database/mysql ».

Actions de récupération :

1° étape : si vous êtes amené à réinstaller PhpMyAdmin, pensez à remettre le même mot de passe qu’utilisé précédemment. Sans cela, il vous faudra changer dans chaque dossier le mot de passe dans les fichiers de configuration de chacun de vos dossiers web ; ce qui peut se révéler assez long.

Étape très bien expliquée par Synology, ici : http://www.synology.com/fr-fr/support/faq/319

2° étape : Procédez à la création de la base avec PhpMyAdmin (exemple todolist). Tapez le nom de votre base de données todolist et cliquez sur le bouton Créer.

Création d’une base de données MySQL
Création d’une base de données MySQL

Conséquence de l’action réalisée via PhpMyAdmin, un dossier au nom de « todolist » a été créé dans le dossier « /volume1/@database/mysql ».

3° étape : Il vous faut maintenant vous connecter en ssh à votre nas, à l’aide de Puty pour aller taper quelques commandes sous Linux en mode root.

  • Déplaçons-nous dans le dossier « mysql » : « cd /volume1/@database/mysql ». 
  • Vérifions la création du dossier à l’aide d’une commande « ls » ou mieux (on verra plus loin que cela a de l’importance), avec un « ls –l ».
Commande linux ls -l
Commande linux ls -l
  • Recopions l’ensemble des fichiers de sauvegarde du dossier todolist avec la commande « cp /volume1/copie_bases/@database/mysql/todolist/*.* /volume1/@database/mysql/todolist ». 
  • On se déplace dans le dossier « cd todolist ». 
  • On retape un « ls –l ». 
ls-l dossier todolist
ls-l dossier todolist

Les fichiers sont biens présents dans le dossier mais pas accessibles via PhpMyAdmin. Cela ne fonctionne pas et le problème est dû à des droits donnés à l’utilisateur « root » alors qu’ils auraient dû être attribués à l’utilisateur « mysql ». Pour remédier à ce problème :

  • Revenons au dossier mysql avce la commande : « cd .. » ou « cd /volume1/@database/mysql »,
  • Tapons la commande suivante pour attribuer les droits du dossier todolist et à tous les fichiers qu’il contient à l’utilisateur mysql : « chown -R mysql:mysql /volume1/@database/mysql/todolist ».

Vérifions avec PhpMyAdmin, que les tables sont bien reconnues :

Vérification tables MySql
Vérification tables MySql

Il est conseiller d’effectuer toujours PhpMyAdmin une vérification des tables et en cas de problème lancer une réparation des tables.

Vérifions ensuite que l’application Todolist fonctionne correctement. Ça marche !!!

Application todolist
Application Todolist

Il ne me reste plus qu’à poursuivre le travail de récupération pour chacune de mes bases de données.

Pascal
Follow me

Laisser un commentaire