Detailliertes Installations- und Konfigurationstutorial zum MySQL-Flashback-Tool binlog2sql

Detailliertes Installations- und Konfigurationstutorial zum MySQL-Flashback-Tool binlog2sql

Überblick

binlog2sql ist ein in Python entwickeltes Open-Source-Tool zum Parsen von MySQL-Binlog. Es kann Binlog in Original-SQL parsen. Es unterstützt auch das Parsen von Binlog in Rollback-SQL und das Entfernen des INSERT-SQL des Primärschlüssels. Es ist ein guter Helfer für DBAs und Betriebs- und Wartungspersonal bei der Datenwiederherstellung.

1. Installation und Konfiguration

1.1 Zweck

  • Schnelles Daten-Rollback (Flashback)
  • Behebung des Datenverlusts beim neuen Master nach Master-Slave-Umschaltung
  • Generieren Sie Standard-SQL aus Binlog und bringen Sie abgeleitete Funktionen ein
  • Unterstützt MySQL 5.6, 5.7

1.2 Installation

Shell> Git-Klon https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
Shell> pip install -r Anforderungen.txt

2. Nutzung

2.1 Konfiguration vor der Verwendung

2.1.1 Parameterkonfiguration

[mysqld]
Server-ID = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1 G
binlog_format = Zeile
binlog_row_image = voll

2.1.2 Mindestanzahl an Berechtigungen, die der Benutzer benötigt

Auswählen, Super-/Replikationsclient, Replikations-Slave

Empfohlene Autorisierung

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT AUF *.* AUF

Berechtigungen

  • select: Sie müssen die Tabelle information_schema.COLUMNS auf der Serverseite lesen, die Metadaten der Tabellenstruktur abrufen und sie in eine visuelle SQL-Anweisung einfügen.
  • Super-/Replikationsclient: Beide Berechtigungen sind verfügbar. Sie müssen „SHOW MASTER STATUS“ ausführen, um die Binlog-Liste auf der Serverseite abzurufen.
  • Replikations-Slave: Erhalten Sie die Berechtigung zum Binlog-Inhalt über das BINLOG_DUMP-Protokoll

2.2 Grundlegende Verwendung

2.2.1 Grundlegende Verwendung

Standard-SQL analysieren

Shell> Python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -t test3 test4 
--start-file='mysql-bin.000002'
​
Ausgabe:
INSERT INTO `test`.`test3`(`addtime`, `data`, `id`) VALUES ('2016-12-10 13:03:38', 'englisch', 4); 
#Start 570 Ende 736
AKTUALISIEREN `test`.`test3` SETZEN `addtime`='2016-12-10 12:00:00', `data`='Deutsch', 
`id`=3 WO `addtime`='2016-12-10 13:03:22' UND `data`='中文' UND `id`=3 LIMIT 1; #Start 763 Ende 954
LÖSCHEN AUS `test`.`test3`, WO `addtime`='2016-12-10 13:03:38' UND `data`='english' UND `id`=4
 LIMIT 1; #Start 981 Ende 1147

Analysieren Sie das Rollback-SQL

Shell> Python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttest3 
--start-file='mysql-bin.000002' --start-position=763 --stop-position=1147
​
Ausgabe:
INSERT INTO `test`.`test3`(`addtime`, `data`, `id`) VALUES ('2016-12-10 13:03:38', 'englisch', 4); 
#Start 981 Ende 1147
AKTUALISIEREN Sie `test`.`test3` SETZEN Sie `addtime`='2016-12-10 13:03:22', `data`='Deutsch', 
`id`=3 WO `addtime`='2016-12-10 12:00:00' UND `data`='中文' UND `id`=3 LIMIT 1; #Start 763 Ende 954

2.2.2 Optionen

MySQL-Verbindungskonfiguration

-h Host; -P Port; -u Benutzer; -p Passwort

Parsing-Modus

--stop-never Fahren Sie mit der Analyse des Binärprotokolls fort. Optional. Der Standardwert ist „False“, was bedeutet, dass bei Ausführung des Befehls eine Synchronisierung mit der neuesten Binärprotokollposition erfolgt.

-K, --no-primary-key Entfernt den Primärschlüssel aus INSERT-Anweisungen. Optional. Standardmäßig: False

-B, --flashback generiert Rollback-SQL, kann große Dateien analysieren und ist nicht durch den Speicher begrenzt. Optional. Der Standardwert ist „False“. Es kann nicht gleichzeitig mit „stop-never“ oder „no-primary-key“ hinzugefügt werden.

--back-interval -B-Modus, jedes Mal, wenn tausend Rollback-SQL-Zeilen gedruckt werden, wird für eine bestimmte Anzahl von Sekunden eine SLEEP-Anweisung hinzugefügt. Wenn Sie SLEEP nicht hinzufügen möchten, setzen Sie es bitte auf 0. Optional. Der Standardwert ist 1,0.

Steuerung des Auflösungsbereichs

--start-file: Für die Startanalysedatei ist nur der Dateiname erforderlich, kein vollständiger Pfad. muss.

--start-position/--start-pos Startposition der Analyse. Optional. Die Standardeinstellung ist die Startposition der Startdatei.

--stop-file/--end-file Stoppt die Dateianalyse. Optional. Standardmäßig ist die gleiche Datei als Startdatei festgelegt. Wenn der Analysemodus „Stop-Never“ ist, hat diese Option keine Wirkung.

--stop-position/--end-pos Stoppt die Analyse der Position. Optional. Der Standardwert ist die letzte Position der Stoppdatei. Wenn der Analysemodus „Stop-Never“ ist, ist diese Option ungültig.

--start-datetime Beginn der Analysezeit, Format „%Y-%m-%d %H:%M:%S“. Optional. Standardmäßig keine Filterung.

--stop-datetime Stoppt die Analysezeit im Format „%Y-%m-%d %H:%M:%S“. Optional. Standardmäßig keine Filterung.

Objektfilterung

-d, --databases analysiert nur das SQL der Zieldatenbank. Mehrere Datenbanken werden durch Leerzeichen getrennt, z. B. -d db1 db2. Optional. Der Standardwert ist leer.

-t, --tables analysiert nur das SQL der Zieltabelle. Mehrere Tabellen werden durch Leerzeichen getrennt, z. B. -t tbl1 tbl2. Optional. Der Standardwert ist leer.

--only-dml Nur DML analysieren, DDL ignorieren. Optional. Der Standardwert ist „False“.

--sql-type analysiert nur den angegebenen Typ und unterstützt INSERT, UPDATE und DELETE. Mehrere Typen werden durch Leerzeichen getrennt, beispielsweise --sql-type INSERT DELETE. Optional. Standardmäßig werden alle Hinzufügungen, Löschungen und Änderungen analysiert. Wenn dieser Parameter verwendet wird, aber kein Typ eingegeben wird, wird keiner der drei analysiert.

2.3 Anwendungsfälle

2.3.1 Die gesamten Tabellendaten wurden versehentlich gelöscht und ein Notfall-Rollback ist erforderlich

Originaldaten der Tbl-Tabelle in der Testbibliothek mysql> select * from tbl;
+----+--------+---------------------+
| ID | Name | Addzeit |
+----+--------+---------------------+
| 1 | Xiao Zhao | 10.12.2016 00:04:33 |
| 2 | Xiaoqian | 10.12.2016 00:04:48 |
| 3 | Xiaosun | 13.12.2016 20:25:00 |
| 4 | Xiao Li | 12.12.2016 00:00:00 |
+----+--------+---------------------+
Zeilen im Set (0,00 Sek.)
​
mysql> aus Tabelle löschen;
Abfrage OK, 4 Zeilen betroffen (0,00 Sek.)
​
Um 20:28 wurde die Tbl-Tabelle aufgrund eines Fehlers gelöscht.mysql> select * from tbl;
Leerer Satz (0,00 Sek.)

Schritte zum Wiederherstellen von Daten:

Melden Sie sich bei MySQL an und zeigen Sie die aktuelle Binärprotokolldatei an.

mysql> Masterstatus anzeigen;
+------------------+------------+
| Protokollname | Dateigröße |
+------------------+------------+
|mysql-bin.000051 | 967 |
|mysql-bin.000052 | 965 |
+------------------+------------+

Die neueste Binärprotokolldatei ist mysql-bin.000052. Lassen Sie uns den Binärprotokollspeicherort der fehlerhaften SQL-Operation ermitteln. Die Person, die den Fehler gemacht hat, kann nur den ungefähren Zeitpunkt des Fehlers kennen, daher filtern wir die Daten basierend auf der ungefähren Zeit.

Shell> Python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl 
--start-file='mysql-bin.000052' --start-datetime='2016-12-13 20:25:00' --stop-datetime='2016-12-13
 20:30:00'
Ausgabe:
INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:26:00', 4, 'Xiao Li'); 
#Start 317 Ende 487 Zeit 2016-12-13 20:26:26
UPDATE `test`.`tbl` SET `addtime`='2016-12-12 00:00:00', `id`=4, `name`='Xiao Li' WHERE `addtime`='2016-12-13 20:26:00' AND `id`=4 AND `name`='Xiao Li' LIMIT 1; #Start 514 Ende 701 Zeit 2016-12-13 20:27:07
LÖSCHEN AUS `test`.`tbl`, WO `addtime`='2016-12-10 00:04:33' UND `id`=1 UND `name`='小赵' LIMIT 1; #Start 728 Ende 938 Zeit 2016-12-13 20:28:05
LÖSCHEN AUS `test`.`tbl`, WO `addtime`='2016-12-10 00:04:48' UND `id`=2 UND `name`='小钱' LIMIT 1; #Start 728 Ende 938 Zeit 2016-12-13 20:28:05
LÖSCHEN AUS `test`.`tbl`, WO `addtime`='2016-12-13 20:25:00' UND `id`=3 UND `name`='Name' LIMIT 1; #Start 728 Ende 938 Zeit 2016-12-13 20:28:05
LÖSCHEN AUS `test`.`tbl`, WO `addtime`='2016-12-12 00:00:00' UND `id`=4 UND `name`='Xiao Li' LIMIT 1; #Start 728 Ende 938 Zeit 2016-12-13 20:28:05

3. Wir haben festgestellt, dass der genaue Speicherort des falschen SQL zwischen 728 und 938 liegt. Wir filtern weiter basierend auf dem Speicherort, verwenden den Flashback-Modus, um Rollback-SQL zu generieren, und prüfen, ob das Rollback-SQL korrekt ist (Hinweis: In realen Umgebungen filtert dieser Schritt häufig das erforderliche SQL weiter heraus. Kombiniert mit grep, Editor usw.)

Shell> Python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-position=3346 --stop-position=3556 -B > rollback.sql | Katze
Ausgabe:
INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-12 00:00:00', 4, 'Xiao Li'); #Start 728 Ende 938 Zeit 2016-12-13 20:28:05
INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:25:00', 3, 'Datei'); #Start 728 Ende 938 Zeit 2016-12-13 20:28:05
INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:48', 2, 'Datei'); #Start 728 Ende 938 Zeit 2016-12-13 20:28:05
INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:33', 1, 'Xiao Zhao'); #Start 728 Ende 938 Zeit 2016-12-13 20:28:05

4. Bestätigen Sie, dass das Rollback-SQL korrekt ist, und führen Sie die Rollback-Anweisung aus. Melden Sie sich bei MySQL an, um zu bestätigen, dass das Daten-Rollback erfolgreich war.

Shell> mysql -h127.0.0.1 -P3306 -uadmin -p'admin' < rollback.sql
​
mysql> wähle * aus tbl;
+----+--------+---------------------+
| ID | Name | Addzeit |
+----+--------+---------------------+
| 1 | Xiao Zhao | 10.12.2016 00:04:33 |
| 2 | Xiaoqian | 10.12.2016 00:04:48 |
| 3 | Xiaosun | 13.12.2016 20:25:00 |
| 4 | Xiao Li | 12.12.2016 00:00:00 |
+----+--------+---------------------+

Abschluss

3.1 Einschränkungen (im Vergleich zu mysqlbinlog)

  • MySQL-Server muss gestartet sein, er kann im Offline-Modus nicht analysiert werden
  • Der Parameter binlog_row_image muss FULL sein. MINIMAL wird noch nicht unterstützt.
  • Die Analysegeschwindigkeit ist nicht so schnell wie bei mysqlbinlog

3.2 Vorteile (im Vergleich zu mysqlbinlog)

  • Reine Python-Entwicklung, einfach zu installieren und zu verwenden
  • Integrierte Flashback- und No-Primary-Key-Parsing-Modi, keine Installation von Patches erforderlich
  • Im Flashback-Modus ist es besser für Flashback-Kämpfe geeignet.
  • Parsen in Standard-SQL zum leichteren Verständnis und Screening
  • Der Code lässt sich leicht ändern und kann eine individuellere Analyse unterstützen

Zusammenfassen

Dies ist das Ende dieses Artikels über die detaillierte Installation und Konfiguration des MySQL-Flashback-Tools binlog2sql. Weitere verwandte Inhalte zum MySQL-Flashback-Tool binlog2sql finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So wählen Sie das Format bei der Verwendung von Binlog in MySQL
  • Beispielüberprüfung MySQL | Update-Feld mit demselben Wert zeichnet Binlog auf
  • Detaillierte Erläuterung des Binlog-Protokollanalysetools zur Überwachung von MySQL: Canal
  • Ausführliche Erklärung des Binlogs in MySQL 8.0
  • Zusammenfassung einiger Gedanken zur Binlog-Optimierung in MySQL
  • MySQL verwendet mysqldump + binlog, um die Prinzipanalyse der gelöschten Datenbank vollständig wiederherzustellen
  • Überwachen Sie Änderungen im MySQL-Tabelleninhalt und aktivieren Sie das MySQL-Binärprotokoll
  • MySQL Binlog-Datenwiederherstellung: Detaillierte Erklärung zum versehentlichen Löschen einer Datenbank
  • Spezifische Verwendung des MySQL-Parameters binlog_ignore_db

<<:  Zusammenfassung von 9 hervorragenden Codevergleichstools, die unter Linux empfohlen werden

>>:  Natives js zum Erreichen eines einfachen Karusselleffekts

Artikel empfehlen

JavaScript zum Implementieren der Anzeige von Suchdaten

In diesem Artikel wird der Datenanzeigecode für d...

Was sind MySQL-Dirty-Pages?

Inhaltsverzeichnis Schmutzige Seiten (Speichersei...

Zusammenfassung der Merkmale des SQL-Modus in MySQL

Vorwort Der SQL-Modus wirkt sich auf die von MySQ...

Wie besteht man die W3C-Validierung?

Neben der Festlegung von Vorschriften für verschi...

Detaillierte Erklärung des JavaScript-Prototyps und Beispiele

Inhaltsverzeichnis Die Beziehung zwischen der Kon...

W3C Tutorial (5): W3C XML Aktivitäten

XML dient der Beschreibung, Speicherung, Übertrag...

Kurze Analyse von MySQL Union und Union All

In der Datenbank führen sowohl die Schlüsselwörte...

Oberflächliches Webdesign

<br />Ich war schon immer der Meinung, dass ...