Stellen Sie die MySQL-Datenbank aus dem Datenordner ohne ibdata1 aus den ibd-Dateien wieder her

15

Mein WAMP-Verzeichnis wurde versehentlich von einem anderen Benutzer gelöscht. Nur der Datenordner in MySQL ist verfügbar. Außerdem sind nur Datenbankordner (Ordner in "\ bin \ mysql \ mysql5.6.12 \ data \" mit dem Namen der Datenbanken) verfügbar. Alle Dateien, einschließlich " ibdata1 " im Stammverzeichnis von "\ bin \ mysql \ mysql5.6.12 \ data \", werden ebenfalls gelöscht.

Der Datenbankordner enthält nur Dateien mit den folgenden Erweiterungen.

* .frm, * .ibd

und "db.opt" Datei.

Wie können die Datenbanken wiederhergestellt werden?

Ich habe bereits versucht, bdata1 wiederherzustellen. Aber ich kann es nicht zurückbekommen. Einige Datenbanken enthalten auch MYISAM.

Cyberwani
quelle

Antworten:

16

MyISAM

Für eine MyISAM-Tabelle mydb.mytable sollten Sie drei Dateien haben

  • \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

Sie sollten bereits als Tabelle verfügbar sein, da jede Datei die erforderlichen Daten, Metadaten und Indexinformationen enthält. Zusammen bilden sie den Tisch. Es sind keine externen Speichermechanismen verfügbar.

InnoDB

Schauen Sie sich diese bildliche Darstellung von InnoDB an

InnoDB-Architektur

Das einzige, was ibdata1 an die .ibdDateien anfügt, ist das Datenwörterbuch.

Ihre Mission, sollten Sie sich dafür entscheiden, es zu akzeptieren, ist es, jeden Tisch zu erstellen und in den zu tauschen .ibd

Bevor Sie etwas tun, erstellen Sie eine vollständige Kopie von "\ bin \ mysql \ mysql5.6.12 \ data" für eine andere

Hier ist ein Beispiel

Angenommen, Sie haben eine Datenbank mydbmit der Tabelle mytable. Das heisst

  • Sie haben den Ordner \bin\mysql\mysql5.6.12\data\mydb
  • In diesem Ordner haben Sie
    • mytable.frm
    • mytable.ibd

Du brauchst das .frm. Wenn Sie sich meinen Beitrag ansehen Wie kann man das Tabellenschema nur aus der .frm-Datei extrahieren? können Sie ein MySQL-Dienstprogramm herunterladen, mit dem die zum Erstellen der Tabelle erforderliche SQL generiert werden kann.

Sie sollten jetzt Folgendes tun

  • Bewegen Sie sich mytable.ibdzu\bin\mysql\mysql5.6.12\data
  • Führen Sie die SQL aus, um die InnoDB-Tabelle zu erstellen
  • Bei MySQL anmelden und ausführen ALTER TABLE mydb.mytable DISCARD TABLESPACE;(dies wird gelöscht \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd)
  • Kopieren \bin\mysql\mysql5.6.12\data\mytable.ibdin\bin\mysql\mysql5.6.12\data\mydb
  • Melden Sie sich bei MySQL an und führen Sie es aus ALTER TABLE mydb.mytable IMPORT TABLESPACE;(dies wird \bin\mysql\mysql5.6.12\data\mydb\mytable.ibdim Datenwörterbuch registriert ).

Danach sollte die Tabelle mydb.mytablevollständig zugänglich sein. Sie können diese Barrierefreiheit testen, indem Sie einfach Folgendes ausführen:

SELECT * FROM mydb.mytable LIMIT 10;

Versuche es !!!

DRINK (Data Recovery beinhaltet das notwendige Wissen) Verantwortungsbewusst

RolandoMySQLDBA
quelle
Um diese großartige Antwort zu vervollständigen, müssen Sie für innodb alle FK-Bedingungen entfernen, die auf die Tabelle verweisen, bevor Sie ihren Tablespace verwerfen. Nach dem Import sollten Sie die FK neu erstellen.
SebaGra
Nach dem Import des Tabellenbereichs geben die information_schema.key_column_usage(wahrscheinlich auch anderen Tabellen) keine Daten zurück. selectSie müssen also mindestens eine Abfrage ausführen und einige Sekunden warten, bis die nächste Abfrage ausgeführt werden kann. (mysql Ver 14.14 Distrib 5.7.19, für linux-glibc2.12 (x86_64) mit EditLine-Wrapper)
user3338098