Comment restaurer une de mes bases de données mysql à partir de fichiers .myd, .myi, .frm ?
Réponses
Trop de publicités?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].
Je viens de découvrir une solution à ce problème. J'utilise MySQL 5.1 ou 5.6 sous Windows 7.
- Copiez le .frm et ibdata1 à partir de l'ancien fichier qui était situé sur " C:\Program Données \MySQL\MSQLServer5.1\Data "
- Arrêter l'instance du serveur SQL dans l'instance SQL actuelle
- Allez dans le dossier de données situé à " C:\Program Données \MySQL\MSQLServer5.1\Data "
- Collez le ibdata1 et le de votre base de données qui contient le fichier .frm. du fichier que vous voulez récupérer.
- Démarrez l'instance MySQL.
Il n'est pas nécessaire de localiser les fichiers .MYI et .MYD pour cette récupération.
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.
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 |
+------------------+-------+----------+----------+