2010-02-22 1 views
6

Une base de données très importante a été corrompue qui était sur le serveur d'un hébergeur partagé, et je n'ai pas sauvegardé. La table contient une grande liste d'adresses e-mail très importantes. Je peux obtenir une liste de table, mais si j'ouvre l'une des tables avec Navicat ou phpMyAdmin, je reçois l'erreur suivante:Comment récupérer une base de données MySQL: Informations incorrectes dans le fichier: './xxx.frm'

informations incorrectes dans le fichier: « ./the-table-name.frm »

J'ai pu obtenir les fichiers .frm associés à la base de données depuis l'hébergeur.

Il ya d'autres données là-dedans, mais si je pouvais au moins obtenir les adresses e-mail, tout irait bien.

Comment récupérer cette base de données? Je serais prêt à payer quelqu'un pour résoudre ce problème.

Répondre

14

Cela appartient à serverfault. D'abord, les fichiers .FRM contiennent aucun de vos "données". Ils sont simplement la définition de la table.

Si tous les conditions suivantes sont remplies:

  • Le tableau utilise le moteur MyISAM
  • Vous connaissez la déclaration CREATE TABLE nécessaire pour recréer la table

Ensuite, , procédez comme suit:

  1. Arrêtez MySQL
  2. Sauvegardez votre nom_de_table.frm, table_name.MYI, fichiers table_name.MYD
  3. les supprimer de votre répertoire de données MySQL (/ var/lib/mysql habituellement)
  4. Démarrer MySQL
  5. créer la table à nouveau
  6. Arrêter MySQL
  7. Copiez les fichiers .MYD et .MYI dans le datadir, en les remplaçant.
  8. Démarrer MySQL
  9. ???
  10. Bénéfice
+0

Merci ... mais est-ce que ça veut dire que si je suis sur InnoDB, je suis foutu? – Wolverine

+0

Eh bien, InnoDB est "crash-safe" et beaucoup plus résistant que MyISAM. Un fichier .frm ne peut pas être corrompu par l'utilisation normale de mysql. Sans savoir ce que tu as fait, je ne peux pas t'aider. Quoi qu'il en soit, cela dépasse la portée de SO, car ce n'est pas lié à la programmation. – hobodave

+0

il ne fonctionne pas pour moi, toujours corrompu table – nick

0

J'ai eu un problème similaire, il se trouve le moteur InnoDB MySQL a été désactivé (j'ai pu vérifier par phpMyAdmin, un pro bash pourrait vous dire comment le faire d'autres manières). Dans mon cas, c'était un simple redémarrage de MySQL, mais vous voudrez peut-être vérifier votre configuration si quelque chose a changé.

0

Vous pouvez essayer les commandes suivantes: CHECK TABLE tablename

Si cela donne essayer de message "corrompu":

REPAIR TABLE nom_table

En fait, ce sont ne pas résoudre mon problème similaire, mais ils peuvent être utiles pour quelqu'un.

Questions connexes