web-dev-qa-db-fra.com

Comment récupérer une base de données MySQL à partir de fichiers .myd, .myi, .frm

Comment restaurer une de mes bases de données MySQL à partir de fichiers .myd, .myi, .frm?

176
chandrajeet

S'il s'agit de tables MyISAM, le fait de placer les fichiers .FRM, .MYD et .MYI dans un répertoire de base de données (par exemple, /var/lib/mysql/dbname) rendra cette table disponible. Il ne doit pas nécessairement s'agir de la même base de données, du même serveur, de la même version de MySQL ou de la même architecture. Vous devrez peut-être également modifier la propriété du dossier (par exemple, chown -R mysql:mysql /var/lib/mysql/dbname).

Notez que les autorisations (GRANT, etc.) font partie de la base de données mysql. Donc, ils ne seront pas restaurés avec les tables; vous devrez peut-être exécuter les instructions GRANT appropriées pour créer des utilisateurs, donner un accès, etc. (Il est possible de restaurer la base de données mysql, mais vous devez faire attention aux versions de MySQL et à toutes les exécutions nécessaires de l'utilitaire mysql_upgrade.)

En fait, vous n’avez probablement besoin que des fichiers .FRM (structure de table) et .MYD (données de table), mais vous devrez réparer table pour reconstruire le fichier .MYI (index).

La seule contrainte est que si vous rétrogradez, vous feriez mieux de consulter les notes de publication (et probablement d'exécuter le tableau de réparation). Les nouvelles versions de MySQL ajoutent des fonctionnalités, bien sûr.

[Bien que cela soit évident, si vous mélangez et faites correspondre des tables, l’intégrité des relations entre ces tables est votre problème; MySQL s'en fiche, mais votre application et vos utilisateurs le peuvent. De plus, cette méthode ne fonctionne pas du tout pour les tables InnoDB. Seulement MyISAM, mais vu les fichiers que vous avez, vous avez MyISAM]

166
derobert

Notez que si vous souhaitez reconstruire le fichier MYI, l'utilisation correcte de REPAIR TABLE est la suivante:

REPAIR TABLE sometable USE_FRM;

Sinon, vous obtiendrez probablement une autre erreur.

23
mcardellg

Je viens de découvrir une solution pour cela. J'utilise MySQL 5.1 ou 5.6 sous Windows 7.

  1. Copiez le fichier . Frm et ibdata1 de l'ancien fichier qui se trouvait dans "C:\Program Data\MySQL\MSQLServer5.1\Data".
  2. Arrêtez l'instance du serveur SQL dans l'instance SQL actuelle
  3. Accédez au dossier de données situé dans "C:\Program Data\MySQL\MSQLServer5.1\Data".
  4. Collez le fichier ibdata1 et le fichier de votre base de données contenant le fichier .frm à partir du fichier à récupérer.
  5. Démarrez l'instance MySQL.

Pas besoin de localiser les fichiers .MYI et .MYD pour cette récupération.

22
alnel

Une chose à noter:

Le fichier .FRM contient votre structure de table et est spécifique à votre version de MySQL.

Le fichier .MYD n'est PAS spécifique à la version, du moins pas aux versions mineures.

Le fichier .MYI est spécifique, mais peut être omis et régénéré avec REPAIR TABLE comme le disent les autres réponses.

Le but de cette réponse est de vous faire savoir que si vous avez un vidage de schéma de vos tables, vous pouvez l'utiliser pour générer la structure de table, puis remplacer ces fichiers .MYD par vos sauvegardes, supprimer les fichiers MYI et les réparer. tout. De cette façon, vous pouvez restaurer vos sauvegardes sur une autre version de MySQL ou déplacer votre base de données sans utiliser mysqldump. J'ai trouvé cela très utile lors du déplacement de grandes bases de données.

14
Brent

Facile! Créer une base de données factice (par exemple abc)

Copiez tous ces fichiers .myd, .myi, .frm dans mysql\data\abc, où mysql\data\est l'emplacement où sont stockés les fichiers .myd, .myi, .frm pour toutes les bases de données.

Ensuite, allez sur phpMyadmin, allez sur db abc et vous trouverez votre base de données.

12
Vishal

Je pense que vous pouvez réparer .myi depuis mysql.

Si vous voyez ce type de message d'erreur de MySQL: La base de données n'a pas pu exécuter la requête (requête) 1016: Impossible d'ouvrir le fichier: 'sometable.MYI'. (numéro d'erreur: 145) Message d'erreur: 1034: Fichier de clé incorrect pour la table: 'sometable'. Essayez de le réparer alors vous avez probablement une table bloquée ou corrompue.

Vous pouvez vérifier et réparer la table à partir d'une invite mysql comme ceci:

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

et maintenant votre table devrait aller bien:

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
7
Elzo Valugi

Vous pouvez copier les fichiers dans un répertoire du sous-répertoire nommé de manière appropriée du dossier de données, à condition qu'il s'agisse de la même version EXACT de mySQL et que vous avez conservé tous les fichiers associés dans ce répertoire. Si vous n'avez pas tous les fichiers, je suis sûr que vous allez avoir des problèmes.

5
cgp

J'ai trouvé une solution pour convertir les fichiers dans un fichier .sql (vous pouvez ensuite importer le fichier .sql sur un serveur et récupérer la base de données), sans avoir à accéder au répertoire /var, donc vous n'avez pas besoin d'être un administrateur de serveur pour le faire non plus.

XAMPP ou MAMP doivent être installés sur votre ordinateur.

  • Après avoir installé XAMPP, accédez au répertoire d'installation (généralement C:\XAMPP), puis au sous-répertoire mysql\data. Le chemin complet doit être C:\XAMPP\mysql\data
  • À l'intérieur, vous verrez les dossiers de toutes les autres bases de données que vous avez créées. Copiez-collez le dossier contenant les fichiers .myd, .myi et .frm. Le chemin d'accès à ce dossier devrait être

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • Ensuite, visitez localhost/phpmyadmin dans un navigateur. Sélectionnez la base de données que vous venez de coller dans le dossier mysql\data, puis cliquez sur Exporter dans la barre de navigation. Choisit l'exporter en tant que fichier .sql. Il apparaîtra ensuite en demandant où est sauvegardé le fichier.

Et c'est ça! Vous devez (maintenant) disposer d'un fichier .sql contenant la base de données qui était à l'origine .myd, .myi et .frm. Vous pouvez ensuite l'importer sur un autre serveur via phpMyAdmin en créant une nouvelle base de données et en appuyant sur "Importer" dans la barre de navigation, puis en suivant les étapes pour l'importer.

4
Kaspar Lee

La description ci-dessus ne suffisait pas pour que les choses fonctionnent pour moi (probablement dense ou paresseux). J'ai donc créé ce script une fois la réponse trouvée pour m'aider à l'avenir. J'espère que ça aide les autres

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;
2
dny238

http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html

Il est dit de renommer les fichiers ib_ *. Je l'ai fait et il m'a rendu la base de données.

2
James