Comment restaurer une de mes bases de données MySQL à partir .myd
, .myi
, les .frm
fichiers?
Comment restaurer une de mes bases de données MySQL à partir .myd
, .myi
, les .frm
fichiers?
Réponses:
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 n'est pas nécessaire qu'il s'agisse de la même base de données dont ils proviennent, 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 mysql
base de données. Donc, ils ne seront pas restaurés avec les tables; vous devrez peut-être exécuter les GRANT
instructions appropriées pour créer des utilisateurs, donner accès, etc. (La restauration de la mysql
base de données est possible, mais vous devez être prudent avec les versions de MySQL et toutes les exécutions nécessaires de l' mysql_upgrade
utilitaire.)
En fait, vous n'avez probablement besoin que du .FRM (structure de table) et .MYD (données de table), mais vous devrez réparer la table pour reconstruire le .MYI (index).
La seule contrainte est que si vous rétrogradez, vous feriez mieux de vérifier les notes de publication (et probablement d'exécuter la table de réparation). Les nouvelles versions de MySQL ajoutent des fonctionnalités, bien sûr.
[Bien que cela devrait être évident, si vous mélangez et associez des tables, l'intégrité des relations entre ces tables est votre problème; MySQL ne s'en souciera pas, 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 compte tenu des fichiers que vous avez, vous avez MyISAM]
check table sometable;
puis d'exécuter la réparation (uniquement si nécessaire): repair table sometable;
Je viens de découvrir une solution pour cela. J'utilise MySQL 5.1 ou 5.6 sur Windows 7.
Pas besoin de localiser les fichiers .MYI et .MYD pour cette récupération.
innodb_force_recovery = 4
niveau (pas sûr que ce soit nécessaire dans ce cas). Dieu merci!
ibdata1
est InnoDB, pas MyISAM.
Une chose à noter:
Le fichier .FRM contient votre structure de table et est spécifique à votre version 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 laissé de côté et régénéré 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 la 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 vers une autre version de MySQL ou déplacer complètement 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.
Facile! Créer une base de données factice (disons abc)
Copiez tous ces fichiers .myd, .myi, .frm dans mysql \ data \ abc où mysql \ data \ est l'endroit où sont stockés .myd, .myi, .frm pour toutes les bases de données.
Ensuite, allez dans phpMyadmin, allez dans db abc et vous trouvez votre base de données.
Je pense que .myi vous pouvez réparer à l'intérieur de mysql.
Si vous voyez ces types de messages 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: 'quelque chose.MYI'. (numéro d'erreur: 145) Message d'erreur: 1034: fichier de clé incorrect pour la table: «quelque chose». Essayez de le réparer alorsb vous avez probablement une table endommagée ou endommagée.
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 |
+------------------+-------+----------+----------+
J'ai trouvé une solution pour convertir les fichiers en .sql
fichier (vous pouvez ensuite importer le .sql
fichier sur un serveur et récupérer la base de données), sans avoir besoin d'accéder au /var
répertoire, vous n'avez donc pas besoin d'être un administrateur de serveur pour le faire non plus.
Il nécessite l'installation de XAMPP ou MAMP sur votre ordinateur.
C:\XAMPP
) et au sous-répertoire mysql\data
. Le chemin complet devrait êtreC:\XAMPP\mysql\data
À l'intérieur, vous verrez des dossiers de toutes les autres bases de données que vous avez créées. Copiez et collez le dossier plein de .myd
, .myi
et les .frm
fichiers là-dedans. Le chemin d'accès à ce dossier doit être
C:\XAMPP\mysql\data\foldername\.mydfiles
Puis visitez localhost/phpmyadmin
dans un navigateur. Sélectionnez la base de données que vous venez de coller dans le mysql\data
dossier et cliquez sur Exporter dans la barre de navigation. Choisit l'exporter sous forme de .sql
fichier. Il apparaîtra alors demandant où enregistrer le fichier
Et c'est tout! Vous (devriez) maintenant avoir un .sql
fichier contenant la base de données qui était à l'origine .myd
, .myi
et les .frm
fichiers. 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
Vous pouvez copier les fichiers dans un répertoire de sous-répertoire nommé de manière appropriée du dossier de données tant qu'il s'agit de la même version EXACTE 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.
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
Il dit de renommer les fichiers ib_ *. Je l'ai fait et cela m'a rendu le db.
La description ci-dessus n'était pas suffisante pour que les choses fonctionnent pour moi (probablement dense ou paresseux), j'ai donc créé ce script une fois que j'ai trouvé la réponse 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;
Pour ceux qui ont Windows XP et MySQL Server 5.5 installé - l'emplacement de la base de données est C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data, sauf si vous avez changé l'emplacement dans l'installation de MySql Workbench GUI.