%20%E2%80%93%20fehlende%20.frm-Dateien%2C%20aber%20intakte%20ibdata.png)
Nach einem kürzlichen Server-Fiasko hatte ich eine allem Anschein nach intakte Ibdata-Datei, aber nur die Hälfte meiner .frm-enthaltenden Verzeichnisse. Ich habe das alles auf eine neue MySQL-Installation kopiert und die Datenbanken, für die ich noch .frm-Dateien hatte, erfolgreich wiederhergestellt. Meine Frage ist: Ist es möglich, die .frm-Dateien irgendwie aus der Ibdata-Datei neu zu generieren? Oder die .frm-Dateien aus der Entwicklungsversion derselben Datenbank irgendwie so zu ändern, dass sie zur Wiederherstellung verwendet werden können?
Leider ist die Wiederherstellung aus einer Sicherung keine praktikable Option.
Zur Klarstellung bearbeitet: Ich habe versucht, die Datenbanken mit lokal generierten .frm-Dateien mit demselben Schema wiederherzustellen – ohne Erfolg, nicht einmal bei innodb_force_recovery = 1.
Antwort1
Ich habe das noch nie gemacht, aber Ihre Frage bezieht sich auf die Tools, die ich verwende, also war ich neugierig! Es sieht so aus, als ob das tatsächlich möglich ist, hier ist ein Beispiel:
http://www.chriscalender.com/?p=28
Manchmal müssen Sie eine Tabelle wiederherstellen, wenn Sie nur die .ibd-Datei haben. Wenn Sie in diesem Fall versuchen, sie in eine neue Instanz zu laden, treten wahrscheinlich Fehler auf, weil die Tabellen-ID nicht übereinstimmt. Und daran führt kein Weg vorbei.
Ich habe jedoch zwei Problemumgehungen hierfür gefunden:
Hinweis: Sie benötigen die .ibd-Datei und die CREATE TABLE-Anweisung für jede Tabelle, die Sie mit diesen Methoden wiederherstellen möchten.
- Simulieren Sie den internen InnoDB-Tabellenzähler. Das heißt, erstellen Sie Arbeitstabellen (mit aktiviertem innodb_file_per_table), bis der interne Zeiger der Tabellen-ID gleich (1 – id_der_IBD-Tabelle_die_Sie_wiederherstellen_müssen) ist. (Siehe Methode Nr. 1)
- Bearbeiten Sie die .ibd-Datei manuell mit einem Hex-Edit, indem Sie die Tabellen-ID ändern. (Siehe Methode Nr. 2)
Die Schritte selbst sind mehrere Seiten lang, deshalb habe ich sie hier nicht eingefügt.
Ein weiterer verwandter Beitrag:http://www.mysqlperformanceblog.com/2011/05/13/connecting-orphaned-ibd-files/
Ich bin gespannt, ob das funktioniert. Es sieht so aus, als hätten es mehrere Leute erfolgreich verwendet.