Ich habe versehentlich alle Tische fallen lassen. Kann ich wieder herstellen? Ich habe keine Sicherungskopie.
Ich habe versehentlich alle Tische fallen lassen. Kann ich wieder herstellen? Ich habe keine Sicherungskopie.
Antworten:
Wenn Sie buchstäblich kein Backup haben, bin ich mir zu 99% sicher, dass Sie kein Glück haben.
Wenn Sie eine noch so alte Form der Sicherung haben, haben Sie dann die binäre Protokollierung über die Option log-bin in der MySQL-Konfigurationsdatei (my.ini) aktiviert? In diesem Fall können Sie sie möglicherweise seit der letzten Sicherung wiederherstellen.
Schlechter Weg, um eine Woche zu beginnen, sorry.
Die Frage ist ziemlich alt, aber es gibt keine einzige positive Antwort, also werde ich eine hinzufügen.
Nachdem MySQL eine Tabelle gelöscht hat, befinden sich die Daten noch eine Weile auf dem Medium. So können Sie Datensätze abrufen und eine Tabelle neu erstellen. Später werde ich darüber bloggen, aber vorerst eine kurze Skizze.
Sie müssten eine Struktur Ihrer Tabelle haben (Anweisung CREATE TABLE).
Wenn innodb_file_per_table aktiviert ist, befindet sich die abgelegte Tabelle auf der Festplattenpartition. Stoppen Sie MySQL und mounten Sie es so schnell wie möglich als schreibgeschützt neu. Wenn sich MySQL auf einer Root-Partition befand (was übrigens keine gute Idee ist), nehmen Sie ein Image oder nehmen Sie die Festplatte heraus und schließen Sie sie an einen anderen Server an. Stoppen Sie alle Schreibvorgänge mit anderen Worten.
Wenn innodb_file_per_table OFF ist, stoppen Sie einfach MySQL.
Laden Sie dann das Un-Drop-Tool für InnoDB von https://github.com/twindb/undrop-for-innodb/ herunter und kompilieren Sie es . Weitere Informationen finden Sie im Beitrag " Kompilieren des TwinDB-Wiederherstellungs-Toolkits ".
Analysieren Sie dann entweder die Festplattenpartition oder ibdata1 (abhängig von der Einstellung 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 festzustellen, in welcher index_id sich die abgelegte Tabelle befand.
Nehmen Sie dann die Tabellenstruktur und holen Sie die Datensätze
./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page
Es werden Datensätze an stdout und der Befehl LOAD DATA an stderr ausgegeben.
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 / mit dem jeweiligen Schema in mein lokales MySQL-Verzeichnis kopiert. Dann habe ich meine lokalen ibdata1 gesichert und die ibdata1 des Servers in das mysql-Verzeichnis kopiert. Mysqld getötet. ( ps aux
um dann die PID zu finden kill PID
). MySQL neu gestartet, im Crash-Recovery-Modus gestartet. Dann habe ich meinen lokalen MySQL-Client gestartet und einen vollständigen Speicherauszug der benötigten Tabellen erstellt.
Und 15.000 Zeilen, die Wochen der Arbeit bei der Eingabe von Metadaten darstellen, von denen wir dachten, dass sie für immer verschwunden sind, werden gespeichert !!
Hoffe das hilft jemandem.
Sie können leider nur sehr wenig tun, außer eine sehr wertvolle Lektion über die Notwendigkeit eines guten Backup-Plans mitzunehmen.
Abhängig vom Tabellentyp können Sie möglicherweise einen Experten finden, der die Daten aus den auf der Disc verbleibenden Daten wieder zusammenfügt. Eine solche forensische Analyse wäre jedoch sehr, sehr teuer (da dies relativ ungewöhnliche Fähigkeiten erfordern würde) und überhaupt nicht garantiert wirklich nützlich sein.
Wenn dies eine MyISAM-Tabelle war, müssen Sie nur die Tabellendateien in / var / log / mysql oder einem anderen Datenverzeichnis wiederherstellen. Dazu können Sie beispielsweise das Dienstprogramm ext3grep verwenden .
Sie können a nicht "rückgängig machen" DROP TABLE
.
Sie können nachsehen, ob in MySQL die binäre Protokollierung aktiviert ist. Vielleicht können Sie einige Daten von dort extrahieren.
Abgesehen davon können Sie MySQL vergessen und befinden sich in derselben Problemklasse 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 dies auf professioneller Basis tun.
Wenn Sie die binäre Protokollierung aktiviert haben, können Sie zuerst eine Tabelle neu erstellen, wenn Sie ein Schema haben. Stellen Sie sicher, dass Sie ein Schema erstellen, während Sie Binlogs deaktiviert haben. Oder Sie können einfach für die Sitzung überspringen. Anschließend können Sie die Binlogs bis zur letzten Anweisung wiedergeben, die die Drop-Tabelle selbst war.
Wenn nicht, können Sie mithilfe eines Sicherungsdumps wiederherstellen, falls vorhanden. Wenn Sie über CSV-Dateien verfügen, können Sie die Methode zum Laden von Daten infile ausführen, um Daten wiederherzustellen. Wenn Sie von mysqldump wiederherstellen, können Sie eine einzelne Tabelle aus der Dump-Datei wiederherstellen, anstatt die vollständige Datenbank wiederherzustellen. Wenn die Datengröße zu groß ist, können Sie die Schlüssel vor dem Laden deaktivieren. Dies erhöht den Wiederherstellungsprozess erheblich.
Für die Zukunft möchten Sie vielleicht einen verspäteten Sklaven haben, der etwa 10 bis 24 Stunden zurückliegt. Sie können einen verzögerten Slave mit dem Percona Toolkit (pt-Slave-Verzögerung) erstellen.