web-dev-qa-db-fra.com

Récupérer la base de données MySQL à partir du dossier de données sans ibdata1 à partir des fichiers ibd

Mon répertoire WAMP est accidentellement supprimé par un autre utilisateur. Seul le dossier de données de MySQL est disponible. Et, en ce sens, seuls les dossiers de base de données (dossiers dans "\ bin\mysql\mysql5.6.12\data \" avec le nom des bases de données) sont disponibles. Tous les fichiers y compris "ibdata1" à la racine de "\ bin\mysql\mysql5.6.12\data \" sont également supprimés.

Les dossiers de base de données contiennent uniquement des fichiers avec les extensions ci-dessous.

* .frm, * .ibd

et le fichier "db.opt".

Comment récupérer les bases de données?

J'ai déjà essayé de récupérer bdata1. Mais, incapable de le récupérer. Et, certaines bases de données contiennent également MYISAM.

15
cyberwani

MyISAM

Pour une table MyISAM mydb.mytable, vous devez avoir trois fichiers

  • \bin\mysql\mysql5.6.12\data\mydb\mytable.frm
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYD
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYI

Ils doivent déjà être accessibles sous forme de tableau, car chaque fichier contient les données, les métadonnées et les informations d'index nécessaires. Collectivement, ils forment la table. Il n'y a aucun mécanisme de moteur de stockage externe auquel accéder.

InnoDB

Jetez un œil à cette représentation picturale d'InnoDB

InnoDB Architecture

La seule chose qui attache ibdata1 au .ibd files est le dictionnaire de données.

Votre mission, si vous décidez de l'accepter, est de créer chaque table et de l'échanger dans le .ibd

Avant de faire quoi que ce soit, faites une copie complète de "\ bin\mysql\mysql5.6.12\data" vers un autre

Voici un exemple

Supposons que vous ayez une base de données mydb avec la table mytable. Ça signifie

  • Vous avez le dossier \bin\mysql\mysql5.6.12\data\mydb
  • Dans ce dossier, vous avez
    • mytable.frm
    • mytable.ibd

Vous avez besoin du .frm. Si vous regardez mon article Comment extraire le schéma de table à partir du fichier .frm? , vous pouvez télécharger un utilitaire MySQL qui peut générer le SQL nécessaire pour créer la table.

Vous devez maintenant faire ce qui suit

  • Bouge toi mytable.ibd à \bin\mysql\mysql5.6.12\data
  • Exécutez le SQL pour créer la table InnoDB
  • Connectez-vous à mysql et exécutez ALTER TABLE mydb.mytable DISCARD TABLESPACE; (Cela supprimera \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd)
  • Copie \bin\mysql\mysql5.6.12\data\mytable.ibd en \bin\mysql\mysql5.6.12\data\mydb
  • Connectez-vous à mysql et exécutez ALTER TABLE mydb.mytable IMPORT TABLESPACE; (Cela enregistrera \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd dans le dictionnaire de données)

Après cela, le tableau mydb.mytable devrait être entièrement accessible. Vous pouvez tester cette accessibilité en exécutant simplement:

SELECT * FROM mydb.mytable LIMIT 10;

Essaie !!!

DRINK (Data Recovery intègre les connaissances nécessaires) de manière responsable

17
RolandoMySQLDBA