Pour une raison quelconque, lorsque j'essaie d'ouvrir mes tables stockées dans .frm
et .ibd
fichiers (que ce soit sur MySQL ou phpmyadmin) cela me donne une erreur de syntaxe, ou il dit qu'il n'existe pas.
J'ai lu l'autre article qui avait un problème similaire à celui-ci, mais je ne sais pas comment vérifier si innodb_file_per_table
est activé, et je suis globalement vraiment confus. J'ai également converti une copie de mon mysql-bin.000002
fichier vers un fichier txt donc je vois que les données de ma base de données ne sont pas complètement perdues.
La base de données a été créée l'année dernière. J'en ai 6 mysql-bin.00000
fichiers, mais pour une raison quelconque, le .000002
est le plus grand. En ce moment, j'ai le .ibd
et .frm
fichiers pour toutes mes bases de données, mais je ne sais pas comment je peux les restaurer dans MySQL, ou du moins dans quelque chose que je peux lire.
J'utilise WampServer 2.4 et MySQL 5.6.12 sur Windows 2003 Server. De plus, suis-je censé télécharger un plugin dans InnoDB?
J'ai finalement compris et résolu mon problème à travers de nombreux essais et erreurs. Pour ceux qui n'ont pas leur fichier ibdata1 d'origine et qui n'ont que leurs fichiers .frm et .ibd, voici comment j'ai restauré mes données.
J'espère que cela vous a aidé et faites-moi savoir si vous avez des questions ou des commentaires! Consultez également http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file pour plus de détails.
Le fichier de données principal InnoDB - généralement nommé ibdata
- est essentiel pour que MySQL puisse comprendre vos fichiers .ibd.
Si vous devez déplacer des données entre des serveurs à l'aide des fichiers binaires, vous devez arrêter MySQL proprement, puis déplacer tous les fichiers de données, , y compris le ou les fichiers ibdata , entre les répertoires.
Un mécanisme plus fiable pour déplacer des données entre des serveurs sous Windows serait d'utiliser ( mysqldump
) ou une exportation de base de données depuis PHPMyAdmin (ou un outil similaire).
Si la journalisation binaire a été activée pendant toute la durée d'exécution de votre serveur (sur la base des commentaires, cela peut ne pas être le cas), vous pouvez également utiliser mysqlbinlog
pour récupérer chaque instruction SQL que vous avez exécutée sur le serveur à partir des fichiers mysql-bin, et recréez la base de données de cette façon. Il devrait y avoir horodatages Unix dans les fichiers mysql-bin qui vous aident à déterminer jusqu'où ils remontent.
Si vous avez perdu vos fichiers de base de données d'origine et qu'il ne vous reste que les fichiers .ibd individuels, vous devrez peut-être recourir à la récupération des données selon les suggestions d'Akuzminsky dans les commentaires.
MySQL 5.6 a quelques nouvelles fonctionnalités pour déplacer les fichiers de données InnoDB .ibd ( tablespaces transportables ), mais ceux-ci nécessitent un certain effort et, pour une base de données suffisamment petite, il sera beaucoup plus facile de transférer des données en utilisant mysqldump
.
Réponse Wiki générée à partir des commentaires de questions par akuzminsky
Si tu vois *.ibd
fichiers puis innodb_file_per_table
est ON
, sinon toutes les tables seraient dans ibdata1
.
S'il indique qu'une table n'existe pas, alors la table est manquante dans le dictionnaire InnoDB. Essayez de vider toutes les tables dans des vidages SQL séparés (une table - un fichier). Ces tables que vous ne pouvez pas vider, vous pouvez les restaurer avec TwinDB recovery toolkit .
Il n'y a pas encore de paquets binaires. Vous devez obtenir le code source de GitHub et le compiler. Voir les instructions sur Récupérer le dictionnaire InnoDB . C'est assez simple:
git clone [email protected]:twindb/undrop-for-innodb.git
et alors
make all