web-dev-qa-db-fra.com

Restaurer la base de données mysql à partir de fichiers .frm

J'ai vidé toutes mes tables toutes les semaines pour obtenir la sauvegarde. Mais plus tard, je comprends qu’il ne stocke que le fichier .frm de la table. Il ne montre pas les fichiers .MYD et .MYI d'une table. Donc, je n'ai que mon fichier .frm de la base de données avec moi et ma base de données est innodb. Donc, puis-je obtenir ma base de données avec des données dans la base de données?

39
user359187

Oui c'est possible. Il ne suffit pas de copier le .frm fichiers dans le dossier de la base de données, mais vous devez également copier le fichier ib_logfiles et ibdata dans votre dossier de données. Je viens de copier le .frm fichiers et copier ces fichiers et juste redémarrer le serveur et ma base de données est restaurée.

Après avoir copié les fichiers ci-dessus, exécutez la commande suivante -

Sudo chown -R mysql: mysql/var/lib/mysql

La commande ci-dessus changera le propriétaire du fichier sous mysql et son dossier en utilisateur MySql. Ce qui est important pour mysql pour lire le .frm et ibdata fichiers.

74
user359187

Cela pourrait être utile pour quelqu'un:

Je ne pouvais récupérer des fichiers frm qu'après un sinistre, du moins je pouvais obtenir la structure de la table à partir de fichiers FRM en procédant comme suit:

1- Créez des tables factices avec au moins une colonne et SAME NAME avec des fichiers frm dans une nouvelle base de données mysql.

Service mysql à 2 arrêts

3- Copiez et collez les anciens fichiers FRM dans les fichiers FRM de la table nouvellement créée, il devrait vous demander si vous souhaitez écraser ou non pour chacun. remplace tout.

Le service mysql à 4 démarrages, et vous avez la structure de votre table ...

cordialement. anybudy

18
anybudy

J'ai utilisé mysqlfrm qui est un excellent outil qui génère du code SQL de création de table à partir de fichiers .frm. Je commençais à obtenir cette erreur méchante de table non trouvée bien que les tables soient listées. Ainsi, j'ai utilisé cet outil pour régénérer les tables. Dans Ubuntu, vous devez l'installer en tant que:

Sudo apt install mysql-utilities

puis,

mysqlfrm --diagnostic mysql/db_name/ > db_name.sql

Créez une nouvelle base de données et vous pourrez ensuite utiliser,

mysql -u username -p < db_name.sql

Cependant, cela vous donnera les tables mais pas les données. Dans mon cas, cela suffisait.

7
Chandan Purohit

J'ai aussi répondu à cette question: https://dba.stackexchange.com/a/42932/24122

J'ai récemment connu le même problème. Je suis sur un Mac et j’ai donc utilisé MAMP pour restaurer la base de données à un point où je pouvais l’exporter dans un dump MySQL.

Vous pouvez lire le billet de blog complet à ce sujet ici: http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on) -a-Mac

Vous devez avoir:

-ibdata1

-ib_logfile0

-ib_logfile1

Des fichiers .FRM de votre dossier mysql_database

-Fresh Installation de MAMP/MAMP Pro que vous êtes prêt à détruire (si besoin est)

  1. SSH sur votre serveur Web (dev, production, aucune différence) et accédez à votre dossier mysql (le mien était à/var/lib/mysql pour une installation de Plesk sur Linux)
  2. Compressez le dossier mysql
  3. Téléchargez une archive du dossier mysql qui devrait contenir toutes les bases de données MySQL, que ce soit MyISAM ou innoDB (vous pouvez scp ce fichier, ou le déplacer dans un répertoire téléchargeable, si besoin est)
  4. Installer MAMP (Mac, Apache, MySQL, PHP)
  5. Accédez à/Applications/MAMP/db/mysql /
  6. Sauvegarde/Applications/MAMP/db/mysql sur une archive Zip (juste au cas où)
  7. Copiez tous les dossiers et fichiers inclus dans l'archive du dossier mysql à partir du serveur de production (environnement mt Plesk dans mon cas) SAUF NE PAS ÉCRIRE:

    -/Applications/MAMP/db/mysql/mysql /

    -/Applications/MAMP/db/mysql/mysql_upgrade_info

    -/Applications/MAMP/db/mysql/performance_schema

  8. Et voila, vous devriez maintenant pouvoir accéder aux bases de données depuis phpMyAdmin, quel soulagement!

Mais ce n'est pas fini, vous devez maintenant exécuter mysqldump pour restaurer ces fichiers dans votre environnement de production, et l'interface phpmyadmin a expiré pour les bases de données volumineuses. Suivez les étapes ici:

http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/

Copié ci-dessous pour référence. Notez que sur une installation MAMP par défaut, le mot de passe est "root".

Comment utiliser mysqldump pour MAMP avec Terminal

BASE DE DONNEES D'EXPORTATION DE MAMP [1]

Première étape: Ouvrir une nouvelle fenêtre de terminal

Deuxième étape: Naviguez jusqu'à l'installation de MAMP en entrant la ligne suivante dans le terminal cd/applications/MAMP/library/bin Appuyez sur la touche Entrée

Troisième étape: Ecrivez la commande de vidage ./mysqldump -u [NOMUTILISATEUR] -p [DONNÉEBASEN]> [PATH_TO_FILE] Appuyez sur la touche Entrée.

Exemple:

./mysqldump -u root -p wp_database > /Applications/MAMP/htdocs/symposium10_wp/wp_db_onezero.sql

Petite astuce: pour naviguer rapidement dans un dossier, vous pouvez le faire glisser dans la fenêtre du terminal. Le dossier en sera écrit. C'était un grand jour quand quelqu'un m'a montré ceci.

Quatrième étape: Cette ligne de texte devrait apparaître après que vous ayez appuyé sur. Entrez Entrez mot de passe: Alors devinez quoi, tapez votre mot de passe, gardez à l'esprit que les lettres apparaissent, mais ils sont là Appuyez sur la touche Entrée

Cinquième étape: Vérifiez l'emplacement de votre fichier, le cas échéant SUCCESS. Vous pouvez maintenant importer la base de données, qui sera décrite ensuite.

Maintenant que vous avez exporté votre base de données mysql, vous pouvez l'importer dans l'environnement de production.

7
jordan8037310

Je viens de copier les dossiers de la base de données dans un dossier MySQL, par exemple, si vous avez une base de données appelée alto, recherchez le dossier alto dans votre dossier MySQL -> Data dans votre sauvegarde et copiez le dossier alto complet et collez-le dans MySQL nouvellement installé - > dossier de données, redémarrez MySQL et cela fonctionne parfaitement.

3
Muddassar Ahmad

Copiez tous les fichiers et remplacez-les dans/var/lib/mysql, après quoi vous devrez changer le propriétaire des fichiers en mysqlceci est tellement important si mariadb.service est redémarré

chown -R mysql: mysql/var/lib/mysql/*

et

chmod -R 700/var/lib/mysql/*

2
Mohsen Beiranvand

Avant de commencer, vous devez arrêter les services WAMP ou au moins les redémarrer lorsque vous êtes invité à les démarrer.

Sur l’ancienne instance du serveur, accédez au dossier de données MySQL par défaut. Cela devrait ressembler à C:\wamp\bin\mysql\mysql5.1.53\data\mysql5.1.53 sera le numéro de version de la base de données MySQL précédemment installée.

Dans ce dossier, vous devriez voir quelques fichiers et dossiers. Les dossiers sont les bases de données MySQL, et contiennent un tas de fichiers .frm dont nous aurons besoin. Vous devez reconnaître les noms de dossier en tant que noms de base de données. Ce dossier et tout leur contenu peuvent être copiés directement dans votre dossier de données MySQL. Vous pouvez également négliger les bases de données par défaut mysql, performance_schema, test.

Si vous démarrez le serveur maintenant, vous verrez que les bases de données sont sélectionnées, mais elles ne contiendront aucune des tables copiées. Pour que le contenu de la base de données soit récupéré, dans le dossier de données, vous devriez voir un fichier ibdata1, ceci est le fichier de données pour les tables, copiez-le directement dans le dossier de données, vous devriez déjà avoir un fichier dans votre nouveau dossier de données appelé "ibdata1" afin que vous souhaitiez le renommer en ibdata1.bak avant de copier à travers le ibdata1 de l'ancien dossier de données MySQL.

Ceci fait, redémarrez tous les services WAMP. Vous pouvez utiliser PhpMyAdmin pour vérifier si vos bases de données ont été restaurées avec succès.

0
Azam Alvi

créer une nouvelle base de données avec le même nom, copier les fichiers .frm .ibd dans xampp/mysql/data/[nom de la base de données] /

vous aurez aussi besoin du fichier ibdata qui se trouve à l'intérieur

xampp/mysql/data / copier le fichier ibdata1 précédent coller dans le fichier coller et le remplacer par le fichier ibdata existant

[ attention: vous pouvez perdre le contenu de la base de données qui vient d'être créé dans le nouveau fichier ibdata ]

0
swanand keskar

Oui! C'est possible

Approche longue mais vous pouvez obtenir toutes les données en utilisant seulement les fichiers .frm. Bien sûr, vous avez besoin d'autres fichiers dans le répertoire mysql/data.

Mon problème

Un jour, mon disque dur s'est écrasé et j'ai eu l'erreur de démarrage de l'écran bleu. J'essaie de me connecter avec plusieurs machines et cela ne fonctionne pas. Comme il s’agit d’une erreur de démarrage, j’étais préoccupé par les fichiers. et j'ai essayé avec le disque dur secondaire et essayer de récupérer les dossiers et les fichiers. J'ai également sauvegardé le dossier complet xampp c:/xampp Juste au cas où, parce que je n'avais pas de dos des bases de données récentes, je me suis vraiment inquiété de la façon de récupérer la base de données. nous avons beaucoup de clients en gestion de projet et en documentation personnelle dans la base de données.

Aucune des méthodes répertoriées dans le commentaire stackoverflow ne fonctionne, du moins pour moi. Il m'a fallu deux jours complets pour rechercher la réponse sur Google à partir des fichiers .frm. Nous avons rencontré plusieurs approches de nombreuses personnes, mais tout était frustrant et il y avait une erreur ou une autre lors de la mise en œuvre. Si la plupart d'entre eux le font fonctionner (sur la base de leur commentaire), alors qu'est-ce qui me manque?.

Parce que j'étais tellement désespéré, j'ai même réinstallé Windows, ce qui a entraîné la perte de tous mes logiciels et j'ai essayé à nouveau. Mais toujours la même erreur

MERCI à Dustin Davis

j'ai trouvé la solution sur son blog et j'ai réussi à la faire fonctionner exactement de la même manière que lui. Laissez-moi donner le crédit à ce type, Dustin Davis ( https://dustindavis.me/restoring-mysql-innodb-files-on-windows/ ). Vous pouvez sauter d’ici à son blog et essayer sa méthode, assez claire et facile à suivre.

Mais il y a quelque chose que j'ai découvert en essayant son approche mais qu'il n'a pas expliqué dans son blog et je ferai de mon mieux pour expliquer comment je l'ai fait et ce que vous devez rechercher.

Suivez ceci exactement

IMPORTANT: Assurez-vous d'installer la même version de XAMPP. Vous ne pouvez pas copier/coller une ancienne version de XAMPP dans une nouvelle version. Cela entraînera des erreurs __config Ou __tracking.

Comment vérifier votre version de XAMPP

  1. Allez dans votre dossier xampp (votre xampp sauvegardé).
  2. Ouvrez le fichier readme_en.txt. qui se trouve dans le répertoire racine de xampp.
  3. Vous devriez voir la version sur le dessus. ###### ApacheFriends XAMPP Version X.X.XX ######

Fichiers à restaurer

xampp(old folder)/mysql/data/

ibdata1
ib_logfile0
ib_logfile1
<databasename>/*.frm
<databasename>/*.ibd

Étape 1

  1. Après avoir installé la même version de xampp.
  2. Ne démarrez pas Apache ou myql

Étape 2

  • Allez dans le dossier mysql/data Et remplacez les ibdata1, ib_logfile0 Et ib_logfile1
  • Maintenant, copiez collez votre dossier database de votre ancienne sauvegarde xampp dans le dossier xampp récemment installé c:/xampp/mysql/data/ Qui contient les fichiers .frm Et .ibd. Si vous n'êtes pas sûr essayez avec une base de données.

Étape 3

  • Allez à c:/xampp/mysql/bin Et cherchez my.cn.
  • Ouvrez le fichier my.cn Et recherchez #skip-innodb, Puis sous cette ligne, recherchez la ligne indiquant innodb_log_file_size=5M, Remplacez-le par 170M. innodb_log_file_size=170M. Ceci est la taille de votre fichier journal et si vous n'êtes pas sûr, réglez-le sur 170

Étape 4

  • Ouvrez maintenant le fichier mysql_start.bat (Fichier batch Windows) qui se trouve dans le répertoire c:/xampp/.
  • Ajoutez –innodb_force_recovery=6 Après le ... --console

    ....
    
    mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console
    –innodb_force_recovery=6
    if errorlevel 1 goto error
    goto finish
    

Étape 5

  • Maintenant, démarrez votre Apache et Mysql.
  • Accédez à votre phpmyadmin et vérifiez votre base de données et ses tables. si vous ne recevez aucune erreur, vous êtes sur la bonne voie.
  • Arrêtez Apache et Mysql et copiez-collez le reste des bases de données.
0
TheHive