2008-09-22 14 views
9

Ich muss eine Datenbank wiederherstellen, die versehentlich in MySQL 5.0 DROPped wurde. Nach dem Überprüfen der Sicherungsdateien scheinen nur .FRM-Dateien die Datenbankdaten zu enthalten.MySQL InnoDB Datenbankwiederherstellung

Kann mir jemand mitteilen, ob dies alles ist, was ich brauche, um eine Datenbankwiederherstellung/-import von der Sicherung durchzuführen, oder gibt es andere Dateien, die ich zur Hand haben sollte, um das zu vervollständigen?

Antwort

14

.frm-Dateien sind nicht die Datendateien, sie speichern nur die "Data Dictionary Information" (siehe MySQL manual). InnoDB speichert seine Daten in ib_logfile * -Dateien. Das ist, was Sie brauchen, um eine Sicherung/Wiederherstellung durchzuführen. Für weitere Details siehe here.

+0

InnoDB benötigt die Dateien ibdata, ib_logfile * und/oder * .ibd zusätzlich zu den * .frm-Dateien. – silfreed

+0

Was ist, wenn Sie nur die ib_logfile * - und die .frm-Dateien (zusammen mit einem monatelangen Backup) haben? jede Chance, sich in diesem Szenario zu erholen? oder brauchst du die ibdata, um überhaupt etwas wiederherzustellen? – eglasius

6

Oh mein ... du bist in Schwierigkeiten. Fahren Sie die Datenbank herunter. Sichern Sie die Innodb-Datei. Beten Sie, dass Sie nichts getan haben, nachdem Sie die Datenbank fallen gelassen haben.

Die Leute von Percona (einschließlich Autoren des MySQL Performance Blog) sollten Ihnen helfen können: Percona emergency support.

Wenn Sie sich auf eigene Faust wagen, nehmen Sie diese mit: Data Recovery Toolkit for Innodb.

Die Logistik davon? Sie müssen jede Seite (die Computer-Term-Seite ... 16k Block im Fall von Innodb) lesen und Ihre Daten auf diese Weise neu erstellen. Es ist eine Arbeit auf sehr niedriger Ebene (wir sprechen davon, dass Sie Ihren Hex-Editor öffnen und anfangen, Bytes zu zählen, wenn das Toolkit das nicht für Sie tut), und wenn Sie kein stark erfahrener Programmierer sind, werden Sie weh tun .

7

Wiederherstellen innodb: (Ihre Datenordner unter der Annahme, C: \ Programme \ MySQL \ MySQL Server 5.5 \ data)

  1. Kopieren Sie die Ordner der Datenbanken (benannt nach dem Datenbankname) Sie wiederherstellen möchten zu C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ Daten
  2. Kopieren Sie die 3 ibdata-Dateien in den Datenordner ex. (C: \ Programme \ MySQL \ MySQL Server 5.5 \ data)

    _ib_logfile0 
    _ib_logfile1 
    _ibdata1 
    
  3. Ermittelt die Größe des _ib_logfile0 in MB (sollte es das gleiche wie _ib_logfile1 sein), indem Sie Datei Rechtsklick -> Eigenschaften

  4. Bearbeiten Sie die mySQL-Konfigurationsdatei (mysql \ bin \ my.ini) für die innodb_log_file_size 343m = genau die ibdata Dateien Größe

  5. Run

    zu sein

    mysqld --defaults-file = mysql \ bin \ my.ini --standalone --console --innodb_force_recovery = 6

  6. Jetzt sollten Sie Ihre Daten in der Datenbank zurück.Exportieren Sie sie phpmysql oder ein anderes Werkzeug

+0

funktioniert nicht für mich - in phpMyAdmin kann ich InnoDb-Tabellen sehen, aber kann nicht auf sie zugreifen –

+0

Schritt 3/4 unsicher, ob sie etwas getan haben. Musste die Dateien in der richtigen Reihenfolge entfernen, um mysql neu zu starten. Unsicher, was Schritt 5 tut ... Aber Schritt 1,2,5 und Neustart mysql schien zu arbeiten! – msponagle

+0

Genau wie @msponagle sagt. Ich konnte nicht alle Schritte ausführen, aber Schritt 1, 2, vielleicht 3, dann starte den Dienst neu und wenn es nicht startet, versuche die Maschine neu zu starten. Das hat für mich funktioniert. – ingkevin

-2

Die detaillierte Lösung, die Sie hier finden können:

http://www.unilogica.com/mysql-innodb-recovery/ (Artikel in Portugiesisch)

Neben der Flagge von innodb_force_recovery, fand ich eine andere Lösung: innodb_file_per_table, die InnoDB-Tabellen in jeder Datei wie MyISAM-Tabellen aufteilt.

Bei einer Wiederherstellung nach einem Absturz können weniger Daten verloren gehen als in einer einzelnen Datei ibdata1.