So stellen Sie versehentlich gelöschte Tabellendaten in MySQL wieder her (unbedingt lesen)

So stellen Sie versehentlich gelöschte Tabellendaten in MySQL wieder her (unbedingt lesen)

Wenn ein Backup vorhanden ist, ist es ganz einfach. Sie müssen nur die aktuellsten Backup-Daten generieren und dann mysqlbinlog verwenden, um die Daten nach dem Backup-Zeitpunkt abzurufen und sie dann im aktuellen Netzwerk wiederherzustellen.

Wenn keine Sicherungskopie vorhanden ist, kann es zu Problemen kommen und die Kosten für die Wiederherstellung der Daten sind ebenfalls sehr hoch.

So verwenden Sie mysqlbinlog, um Daten nach dem Sicherungszeitpunkt abzurufen:

Führen Sie ein einfaches Experiment durch, löschen Sie die MySQL-Tabellendaten und verwenden Sie dann mysqlbinlog, um die Daten der gerade gelöschten Tabelle abzurufen.

Die Erstellungszeit der App-Tabelle und das Einfügen der Daten: 2013-02-04 10:00:00

Prinzip: mysqlbinlog

Voraussetzung: MySQL hat Binärprotokoll aktiviert

Vor dem Testen des Löschens:

mysql> Tabellen anzeigen;
+--------------------------+
| Tabellen_im_Bericht_sina |
+--------------------------+
| App |
| Prüfung |
+--------------------------+

mysql> jetzt auswählen();
+---------------------+
| jetzt() |
+---------------------+
| 04.02.2013 11:45:44 |
+---------------------+
1 Zeile im Satz (0,01 Sek.)


mysql> wähle count(1) aus App aus;
+----------+
| Anzahl(1) |
+----------+
| 10 |
+----------+
1 Zeile im Satz (0,01 Sek.)

Datenlöschung starten:

mysql> löschen aus App, wo ID =1;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)

MySQL> 
mysql> löschen aus App, wo ID < 6;
Abfrage OK, 4 Zeilen betroffen (0,01 Sek.)


mysql> wähle count(1) aus App aus;
+----------+
| Anzahl(1) |
+----------+
| 5 |
+----------+
1 Zeile im Satz (0,00 Sek.)

 

mysql> jetzt auswählen();
+---------------------+
| jetzt() |
+---------------------+
| 04.02.2013 12:08:45 |
+---------------------+

Datenabruf starten:

1. Suchen Sie den Speicherort des Bin-Protokolls:

/app/mysql/log

-rw-rw---- 1 mysql mysql 17K 4. Feb. 11:43 alert.log
-rw-rw---- 1 mysql mysql 1,0K 1. Nov. 14:52 master-bin.000001
-rw-rw---- 1 mysql mysql 126 25. Dezember 14:00 master-bin.000002
-rw-rw---- 1 mysql mysql 126 25. Dezember 14:02 master-bin.000003
-rw-rw---- 1 mysql mysql 126 25. Dezember 14:02 master-bin.000004
-rw-rw---- 1 mysql mysql 107 25. Dezember 14:02 master-bin.000005
-rw-rw---- 1 mysql mysql 13K 4. Feb. 12:02 master-bin.000006

Sie können sehen, dass das einzige kürzlich geänderte Binärprotokoll master-bin.000006 ist.

(Wenn sich die versehentliche Löschung über mehrere Bin-Protokolle erstreckt, müssen Sie die Daten beim Abrufen der Bin-Protokolle einzeln abrufen.)

Speichern Sie alle während dieser Zeit ausgeführten SQL-Anweisungen in der wiederherzustellenden SQL-Datei.

mysqlbinlog --start-date='2013-02-04 10:00:00' --stop-date='2013-02-04 12:08:45' /app/mysql/log/master-bin.000006 >/app/mysql/mysql_restore_20130204.sql

Natürlich ist diese Zeit in der aktuellen Netzwerkumgebung möglicherweise nicht so genau und es kann zu Störungen durch andere Transaktions-SQL-Anweisungen kommen.

Erstellen einer temporären Datenbank

Datenbank für_bak erstellen;

Exportieren Sie die Tabellen, die versehentlich in der aktuellen Datenbank-App gelöscht wurden

mysqldump -uroot -ppwd meine_db-App > /app/mysql/app.sql

Importieren Sie die aktuellen Daten in eine temporäre Tabelle:

mysql -root -ppwd for_bak < /app/mysql/app.sql

Schauen wir uns einen Teil des Inhalts von /app/mysql/mysql_restore_20130204.sql an: (Sie können die böse Löschanweisung sehen)

ZEITSTEMPEL EINSTELLEN=1359949544/*!*/;
BEGINNEN
/*!*/;
# bei 12878
#130204 11:45:44 Server-ID 1 End-Log-Pos 12975 Abfrage Thread-ID = 5 Exec-Zeit = 974 Fehlercode = 0
ZEITSTEMPEL EINSTELLEN=1359949544/*!*/;
aus App löschen, bei der ID =1
/*!*/;
# bei 12975
#130204 11:45:44 Server-ID 1 end_log_pos 13002 Xid = 106
BEGEHEN /*!*/;
# bei 13002
#130204 11:45:44 Server-ID 1 End-Log-Pos 13077 Abfrage Thread-ID = 5 Exec-Zeit = 1013 Fehlercode = 0
ZEITSTEMPEL EINSTELLEN=1359949544/*!*/;
BEGINNEN
/*!*/;
# bei 13077
#130204 11:45:44 Server-ID 1 End-Log-Pos 13175 Abfrage Thread-ID = 5 Exec-Zeit = 1013 Fehlercode = 0
ZEITSTEMPEL EINSTELLEN=1359949544/*!*/;
aus App löschen, deren ID < 6 ist
/*!*/;
# bei 13175
#130204 11:45:44 Server-ID 1 end_log_pos 13202 Xid = 107
BEGEHEN /*!*/;
TRENNUNGSZEICHEN ;
# Ende der Protokolldatei

Sie können sehen, wann die Daten gelöscht wurden. Die konkrete Zeit kann auch mit „select from_unixtime(1359949544);“ abgefragt werden.

Glücklicherweise befinden sich auch die Anweisung „Create Table App“ und die Anweisung „Insert“ in dieser Datei. Nach dem manuellen Entfernen der Löschanweisung wird die aus mysqlbinlog abgerufene SQL-Datei in der temporären Datenbank als Quelle verwendet.

Dadurch wird die App in den Zustand vor dem Löschen zurückversetzt. Importieren Sie dann die Daten der temporären Bibliothek in die vorhandenen Netzwerkdaten (dies ist nicht der Schwerpunkt dieses Artikels).

Wenn keine Sicherung vorhanden ist, kann das Abrufen aller mit der App-Tabelle verknüpften Daten sehr mühsam sein, insbesondere wenn viele Binärprotokolldateien vorhanden sind und jede relativ groß ist.

In diesem Fall besteht die einzige Möglichkeit darin, mit mysqlbinlog die SQL-Datensätze der mit der App-Tabelle verknüpften DML-Operationen von der Erstellung der App bis heute nacheinander abzurufen und die Daten dann zu integrieren und wiederherzustellen.

Ich denke, diese Situation ist im Allgemeinen selten. Obwohl es mühsam ist, ist eine Wiederherstellung nicht unmöglich.

Der obige Artikel zum Wiederherstellen versehentlich gelöschter Tabellendaten in MySQL (unbedingt lesen) ist alles, was ich mit Ihnen teilen möchte. Ich hoffe, er kann Ihnen als Referenz dienen, und ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden.

Das könnte Sie auch interessieren:
  • Eine schnelle Lösung zum versehentlichen Löschen von MySQL-Daten (MySQL Flashback Tool)
  • Anweisungen zum Wiederherstellen von Daten nach versehentlichem Löschen einer MySQL-Datenbank
  • Lösung für das versehentliche Löschen der physischen Datei der MySQL-Tabelle
  • So stellen Sie den MySQL-Root-Benutzer wieder her, nachdem er versehentlich gelöscht wurde
  • So stellen Sie MySQL wieder her, nachdem Sie ibdata1 versehentlich gelöscht haben
  • Lösung für das versehentliche Löschen des Root-Benutzers oder das Vergessen des Root-Passworts durch MySQL
  • Lösung für das versehentliche Löschen von Daten in MySQL und Kill-Anweisungsprinzip

<<:  Beispiel für eine Domänennamenüberprüfungsmethode für Betrieb und Wartung von Nginx

>>:  So verwenden Sie Chrome Dev Tools zur Analyse der Seitenleistung (Front-End-Leistungsoptimierung)

Artikel empfehlen

SSH-Schlüsselpaare von einer oder mehreren Linux-Instanzen trennen

Schlüsselpaar trennen Trennen Sie SSH-Schlüsselpa...

Stil-Trigger-Effekt des Webseiten-Eingabefelds

<br />Dieses Beispiel untersucht hauptsächli...

Beispiel zur Erläuterung der Größe einer MySQL-Statistiktabelle

Das Zählen der Größe jeder Tabelle in jeder Daten...

Vollständige Schritte zur Deinstallation der MySQL-Datenbank

Der Vorgang zur vollständigen Deinstallation der ...

So erstellen Sie einen DHCP-Server in Linux

Inhaltsverzeichnis 1. Grundkenntnisse: 2. DHCP-Se...

3 Möglichkeiten, die maximale Anzahl von Verbindungen in MySQL richtig zu ändern

Wir alle wissen, dass die standardmäßige MySQL-Da...

Einführung in die Bereitstellung des Selenium-Crawler-Programms unter Linux

Inhaltsverzeichnis Vorwort 1. Was ist Selen? 2. N...