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

JavaScript implementiert coole Mouse-Tailing-Effekte

Nachdem Sie sich das angesehen haben, garantiere ...

So löschen Sie node_modules und installieren es neu

Inhaltsverzeichnis Schritt 1: Installieren Sie no...

So setzen Sie das Zabbix-Passwort zurück (ein Schritt)

Problembeschreibung Da wir uns nicht lange bei Za...

So verwenden Sie die Baidu Map API im Vue-Projekt

Inhaltsverzeichnis 1. Registrieren Sie ein Konto ...

Einige Tipps zum Website-Design

Tatsächlich haben wir in letzter Zeit viel über W...

Beispieldemonstration der Vuex-Modularisierung und Namespaces

1. Zweck: Machen Sie den Code leichter wartbar un...

Einführung in die Installation und Konfiguration von JDK unter CentOS-Systemen

Inhaltsverzeichnis Vorwort Überprüfen und deinsta...

Implementierung der Docker-Bereitstellung von Tomcat- und Webanwendungen

1. Docker online herunterladen yum install -y epe...

Beispiele für die MySQL-Verschlüsselung und -Entschlüsselung

Beispiele für die MySQL-Verschlüsselung und -Ents...

Einführung und Verwendungszusammenfassung der negativen Margenfunktion

Bereits in den CSS2-Empfehlungen von 1998 verschwa...

Detaillierte Erklärung des Vue-Elements plus Mehrsprachenumschaltung

Inhaltsverzeichnis Vorwort Wie wechselt man zwisc...

100 Möglichkeiten, die Farbe eines Bildes mit CSS zu ändern (sammelnswert)

Vorwort „Wenn es um Bildbearbeitung geht, denken ...