178 votes

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 ?

167voto

derobert Points 26258

S'il s'agit de tables MyISAM, il suffit 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 n'est pas nécessaire que ce soit la même base de données d'où ils proviennent, le même serveur, la même version de MySQL ou la même architecture. Vous devrez peut-être aussi changer la propriété du dossier (par exemple, 'chown -R mysql:mysql /var/lib/mysql/dbname').

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

La seule contrainte est que si vous effectuez une rétrogradation, il est préférable de vérifier les notes de version (et probablement d'exécuter repair table). Les versions plus récentes de MySQL ajoutent des fonctionnalités, bien sûr.

(Bien que cela devrait être évident, si vous mélangez les tables, l'intégrité des relations entre ces tables est votre problème ; MySQL ne s'en soucie pas, mais votre application et vos utilisateurs peuvent le faire. 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].

24voto

mcardellg Points 141

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

REPAIR TABLE sometable USE_FRM ;

Sinon, vous obtiendrez probablement une autre erreur.

23voto

alnel Points 81

Je viens de découvrir une solution à ce problème. J'utilise MySQL 5.1 ou 5.6 sous Windows 7.

  1. Copiez le .frm et ibdata1 à partir de l'ancien fichier qui était situé sur " C:\Program Données \MySQL\MSQLServer5.1\Data "
  2. Arrêter l'instance du serveur SQL dans l'instance SQL actuelle
  3. Allez dans le dossier de données situé à " C:\Program Données \MySQL\MSQLServer5.1\Data "
  4. Collez le ibdata1 et le de votre base de données qui contient le fichier .frm. du fichier que vous voulez récupérer.
  5. Démarrez l'instance MySQL.

Il n'est pas nécessaire de localiser les fichiers .MYI et .MYD pour cette récupération.

14voto

UltimateBrent Points 6167

Une chose à noter :

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

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

Le fichier .MYI est spécifique, mais peut être laissé de côté 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 disposez d'un dump de schéma de vos tables, vous pouvez l'utiliser pour générer la structure des tables, puis remplacer ces fichiers .MYD par vos sauvegardes, supprimer les fichiers MYI et réparer le tout. De cette manière, vous pouvez restaurer vos sauvegardes vers une autre version de MySQL, ou déplacer votre base de données sans utiliser le logiciel mysqldump . J'ai trouvé cela très utile lors du déplacement de grandes bases de données.

7voto

Elzo Valugi Points 10906

Je pense que le .myi peut être réparé à partir de mysql.

Si vous voyez ce type de messages d'erreur de MySQL : La base de données n'a pas réussi à exécuter la requête (query) 1016 : Impossible d'ouvrir le fichier : 'sometable.MYI'. (errno : 145) Error Msg : 1034 : Fichier clé incorrect pour la table : 'sometable'. Essayez de le réparer alorsb vous avez probablement une table endommagé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 être bien :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X