Wie kann ich DROP Table rückgängig machen?

Wie kann ich DROP Table rückgängig machen?

Ich habe versehentlich alle Tabellen gelöscht. Kann ich sie wiederherstellen? Ich habe keine Sicherungskopie.

Antwort1

Wenn Sie buchstäblich kein Backup haben, dann bin ich zu 99 % sicher, dass Sie Pech gehabt haben.

Wenn Sie über eine beliebige Form von Backup verfügen, egal wie alt, haben Sie dann die binäre Protokollierung über die Option „log-bin“ in der MySQL-Konfigurationsdatei (my.ini) aktiviert? Wenn ja, können Sie möglicherweise Daten seit dem letzten Backup wiederherstellen.

Schlechter Start in die Woche, Alter, tut mir leid.

Antwort2

Die Frage ist ziemlich alt, aber es gibt keine eindeutige positive Antwort, deshalb füge ich eine hinzu.

Nachdem MySQL eine Tabelle gelöscht hat, sind die Daten noch eine Weile auf dem Medium. Sie können also Datensätze abrufen und eine Tabelle neu erstellen. Später werde ich darüber bloggen, aber vorerst eine kurze Skizze.

Sie benötigen die Struktur Ihrer Tabelle (Anweisung CREATE TABLE).

Wenn innodb_file_per_table eingeschaltet ist, befinden sich die gelöschten Tabellen auf der Festplattenpartition. Stoppen Sie MySQL und mounten Sie es so schnell wie möglich schreibgeschützt erneut. Wenn MySQL sich auf einer Root-Partition befand (was übrigens keine gute Idee ist), erstellen Sie ein Image oder nehmen Sie die Festplatte heraus und schließen Sie sie an einen anderen Server an. Mit anderen Worten: Stoppen Sie alle Schreibvorgänge.

Wenn innodb_file_per_table deaktiviert ist, stoppen Sie einfach MySQL.

Laden Sie dann das Undrop-Tool für InnoDB herunter und kompilieren Sie es vonhttps://github.com/twindb/undrop-for-innodb/. Weitere Einzelheiten finden Sie im Beitrag „[Compiling TwinDB recovery toolkit][1]“.

Analysieren Sie dann entweder die Festplattenpartition oder ibdata1 (je nach Einstellung von innodb_file_per_table) mit stream_parser:

./stream_parser -f /path/to/diskimage_or_ibdata1

Stellen Sie dann das InnoDB-Wörterbuch wieder her, um zu erfahren, in welcher Index-ID sich die gelöschte Tabelle befand.

Dann nehmen Sie die Tabellenstruktur und holen die Datensätze

./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page

Es werden Datensätze auf stdout und der Befehl LOAD DATA auf stderr ausgegeben. [1]:https://twindb.com/how-to-recover-innodb-dictionary/

PS-Video-Tutorial zu Undrop für InnoDB – Übersicht zu Undrop für InnoDBhttps://youtu.be/-1LeLhGjAWM

Antwort3

Folgendes habe ich getan. Im MySQL-Verzeichnis (für Ubuntu ist dies /var/lib/mysql, für Mac mit Homebrew ist dies /usr/local/var/mysql) habe ich einige Dateien gefunden. Zuerst habe ich das Verzeichnis myapp_development/, das das jeweilige Schema enthält, in mein lokales MySQL-Verzeichnis kopiert. Dann habe ich mein lokales ibdata1 gesichert und das ibdata1 des Servers in das MySQL-Verzeichnis kopiert. Habe mysqld beendet. ( ps auxum dann die PID zu finden kill PID). Habe MySQL neu gestartet, es startete im Absturzwiederherstellungsmodus. Dann habe ich meinen lokalen MySQL-Client gestartet und einen vollständigen Dump der Tabellen generiert, die ich brauchte.

Und 15.000 Zeilen, die wochenlange Arbeit an der Eingabe von Metadaten darstellen, von denen wir dachten, sie wären für immer verloren!!

Hoffe, das hilft jemandem.

Antwort4

Sie können eine Aktion nicht „rückgängig machen“ DROP TABLE.

Sie können nachsehen, ob MySQLBinäres Loggingaktiviert, vielleicht können Sie von dort einige Daten extrahieren.

Ansonsten können Sie MySQL vergessen und haben dasselbe Problem wie „Ich habe versehentlich einige Dateien aus meinem Dateisystem gelöscht“. Es gibt einige Tools, die versuchen, Dateien wiederherzustellen, und es gibt auch Unternehmen, die das professionell tun.

verwandte Informationen