Implementierung von MySQL mit dem Befehl mysqlbinlog zum Wiederherstellen versehentlich gelöschter Daten

Implementierung von MySQL mit dem Befehl mysqlbinlog zum Wiederherstellen versehentlich gelöschter Daten

Experimentelle Umgebung:

MySQL 5.7.22

Binäres Logging aktivieren

Protokollformat GEMISCHT

Versuchsablauf:

1. Ausführen: FLUSH LOGS;

Die Datei master-bin.000014 ist die neu generierte Datei

Der Zweck der Aktualisierung des Protokolls besteht darin, den experimentellen Inhalt intuitiver zu gestalten und die Beobachtung des Inhalts des gesamten experimentellen Prozesses zu erleichtern.

Ich habe online viele Artikel gesehen, in denen es um die Verwendung von REST MASTER geht, aber sie erklären nicht die Ernsthaftigkeit dieses Befehls.

Dieser Befehl löscht alle Protokolldateien und setzt die Dateinamen und Protokollpunkte auf Null zurück. In 99 % der Fälle ist dieser Befehl nicht erforderlich.

Zum Löschen von Protokollen können Sie PURGE MASTER LOGS verwenden. Dies ist sicherer

2. Eine neue Protokolldatei wurde generiert. Schauen wir uns zunächst den Inhalt an. Es gibt einige Punkte, die Sie verstehen müssen.

Zeigen Sie den Befehl für die Binärprotokolldatei an: mysqlbinlog master-bin.000014

# bei 4
#180903 16:19:12 Server-ID 1 end_log_pos 123 CRC32 0xe03659b3 Start: Binlog v 4, Server v 5.7.22-Log erstellt 180903 16:19:12

Schauen Sie sich zunächst die beiden Pfeile oben an:

  • # bei 4 (dem Startpunkt des Ereignisses)
  • #180903 16:19:12 (stellt die Uhrzeit dar)
  • Server-ID 1 (Wenn Sie eine Master-Slave-Replikation durchführen, müssen Sie für jede MySQL-Datenbank eine eindeutige SERVER-ID angeben. Ich habe sie nicht konfiguriert und der Standardwert ist 1.)
  • end_log_pos 123 (Ereignisendpunkt)

Schauen Sie sich die beiden Pfeile unten an:

  • # bei 123 (der Ereignisstartpunkt, der dem Ereignisendpunkt oben entspricht)
  • end_log_pos 154 (Ereignisendpunkt)
  • Der Inhalt zwischen 4 und 123 ist der Ereignisinhalt

3. Simulieren Sie ein Geschäftsszenario, erstellen Sie eine Tabelle, fügen Sie Daten ein und löschen Sie schließlich eine Tabelle. Um es realistisch zu machen, habe ich zwei Datenbanken erstellt, gleichzeitig Inhalte in verschiedene Datenbanken geschrieben und schließlich eine Tabelle in einer der Datenbanken gelöscht.

mysql> PROTOKOLLE LEEREN;
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

mysql> Datenbank t1 erstellen;
Abfrage OK, 1 Zeile betroffen (0,03 Sek.)

mysql> Datenbank t2 erstellen;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)

mysql> verwende t1;
Datenbank geändert
mysql> Tabelle t1 erstellen (ID int);
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)

mysql> verwende t2;
Datenbank geändert
mysql> Tabelle t2 erstellen (ID int);
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)

mysql> in t2-Werte einfügen (3);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

mysql> in t2-Werte einfügen (4);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

mysql> verwende t1;
Datenbank geändert
mysql> in t1-Werte einfügen (1);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

mysql> in t1-Werte einfügen (2);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

mysql> verwende t2;
Datenbank geändert
mysql> in t2-Werte einfügen (20);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

mysql> verwende t1;
Datenbank geändert
mysql> in t1-Werte einfügen (10);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

mysql> Tabelle t1 löschen;
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)

mysql> verwende t2;
Datenbank geändert
mysql> in t2-Werte einfügen (222);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

MySQL>

Erstellen Sie T1- und T2-Bibliotheken und erstellen Sie T1- und T2-Tabellen.

Daten in T1 einfügen: 1, 2, 10

Daten in T2 einfügen: 3, 4, 20, 222

Im Simulationsszenario wird die Tabelle T1 gelöscht, der Betrieb der Tabelle T2 in der Datenbank T2 läuft jedoch weiter.

Jetzt werden wir die T1-Tabelle über das Protokoll wiederherstellen.

Suchen Sie zunächst den Protokollpunkt des Löschbefehls:

mysqlbinlog master-bin.000014|grep -5a "Tabelle löschen" 

Siehe #AT 2439 (notieren Sie sich diese Nummer)

Der DROP TABLE-Vorgang wird an diesem Ereignispunkt ausgeführt.

Da die Protokolldatei nicht nur die Protokolle der T1-Datenbank, sondern auch die Protokolle der T2-Datenbank enthält, rufen wir nur die Protokolle der T1-Datenbank ab.

Und nur die Protokolle vor Protokollpunkt 2439 werden übernommen und erneut angewendet

Wenn das Protokoll 2439 erstellt wird, erstellt die Datenbank die Datenbank und die Tabelle neu, fügt Daten ein und führt die Anweisung zum Löschen der Tabelle aus, wenn sie erneut angewendet wird.

mysqlbinlog -d t1 --stop-position=2439 master-bin.000014>test.sql (beim Ausführen dieser Anweisung wurde ein Fehler gemeldet)

ACHTUNG: Die Option --database wurde verwendet. Sie filtert möglicherweise Teile von Transaktionen, schließt aber in jedem Fall die GTIDs ein. Wenn Sie Transaktionen ausschließen oder einschließen möchten, sollten Sie stattdessen die Optionen --exclude-gtids bzw. --include-gtids verwenden.
Ich kann den Grund im Moment nicht herausfinden, also habe ich auf Baidu gesucht und es wie folgt geändert:

mysqlbinlog master-bin.000014 -d t1 --skip-gtids --stop-position=2439>test.sql 

-d: Parameter gibt ein Datenbankprotokoll an

Der Befehl dient zur Ausgabe des T1-Datenbankprotokolls in der Protokolldatei master-bin.000014, des Protokolls vor Ereignispunkt 2439, nach test.sql.

# Ende test.sql

Schauen Sie sich die letzten Zeilen der Datei an

Melden Sie sich bei der Datenbank an:

mysql> verwende t1;
Datenbank geändert

mysql> Quelle test.sql

Einmal wurde mittendrin ein Fehler gemeldet, da dieser die Anweisung zum Aufbau der Datenbank T1 enthielt.

Überprüfen Sie den Tabelleninhalt erneut

Auf diese Weise werden die Daten zurückgegeben.

Dies ist das Ende dieses Artikels über die Verwendung des Befehls mysqlbinlog zum Wiederherstellen versehentlich gelöschter Daten. Weitere Informationen zur Wiederherstellung versehentlich gelöschter Daten mit mysqlbinlog finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Lösung für das Problem, dass MySQL-Befehle nicht auf Chinesisch eingegeben werden können
  • Detaillierte Erklärung der Kodierungsprobleme bei MySQL-Befehlszeilenoperationen
  • Einführung in die Verwendung von MySQL-Quellbefehlen
  • MySQL häufig verwendete SQL und Befehle vom Eintrag bis zum Löschen der Datenbank und zum Weglaufen
  • Einführung in Abfragebefehle für gespeicherte MySQL-Prozeduren
  • Drei Methoden zum automatischen Vervollständigen von Befehlen in der MySQL-Datenbank
  • Das MySQL-Passwort enthält Sonderzeichen und den Anmeldevorgang über die Befehlszeile
  • Die Ressourcen und Aktivierungsmethoden des MySQL-Desktoptools SQLyog verabschieden sich von der schwarz-weißen Befehlszeile
  • MySQL-Anmelde- und Beendigungsbefehlsformat
  • So verwenden Sie den MySQL-Autorisierungsbefehl „grant“
  • Zusammenfassung der grundlegenden allgemeinen MySQL-Befehle

<<:  Lösen Sie das Problem, dass der Container nach dem Docker-Lauf „Beendet (0)“ anzeigt.

>>:  Diskussion über Web-Nachahmung und Plagiat

Artikel empfehlen

Detaillierte Schritte zum Herunterladen und Installieren von Tomcat unter Linux

Wenn Sie gerade erst mit Linux in Berührung gekom...

Detaillierte Erklärung der dynamischen Angular-Komponenten

Inhaltsverzeichnis Anwendungsszenarien So erreich...

Zusammenfassung der drei Phasen der Entwicklung eines visuellen Designers

Viele Leute haben dieses Buch gelesen: „Entwickel...

Lösung für „Keine Eingabedatei angegeben“ in nginx+php

Heute ist in meiner lokalen Entwicklungsumgebung ...

Three.js realisiert den dynamischen 3D-Logoeffekt von Facebook Metaverse

Inhaltsverzeichnis Hintergrund Was ist das Metave...

Detaillierte Erklärung zur Verwendung von $props, $attrs und $listeners in Vue

Inhaltsverzeichnis Hintergrund 1. Dokumentbeschre...

So installieren Sie das Pip-Paket unter Linux

1. Laden Sie das Pip-Installationspaket entsprech...

Lösung für das Problem des achtstündigen Unterschieds bei der MySQL-Einfügezeit

Lösen Sie das Problem des achtstündigen Zeitunter...

Lösung für das Problem, dass Nacos keine Verbindung zu MySQL herstellen kann

Grund Die MySQL-Version, von der Nacos‘ POM abhän...

Node.js versendet E-Mails basierend auf dem STMP-Protokoll und dem EWS-Protokoll

Inhaltsverzeichnis 1 Node.js-Methode zum Senden v...

Was ist Software 404 und 404-Fehler und was ist der Unterschied zwischen ihnen

Zunächst einmal: Was ist 404 und Soft 404? 404: Ei...

Detailliertes Tutorial zur Installation von MySQL unter Linux

1. Beenden Sie den MySQL-Dienst # service mysqld ...