Überblick Binlog2sql ist ein Open-Source-MySQL-Binlog-Parsing-Tool, das in Python entwickelt wurde. 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) 1.2 Installation Shell> Git-Klon https://github.com/danfengcao/binlog2sql.git && cd binlog2sql 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 Auswählen, Super-/Replikationsclient, Replikations-Slave Berechtigungen
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 end 736 UPDATE `test`.`test3` SET `addtime`='2016-12-10 12:00:00', `data`='中文', `id`=3 WHERE `addtime`='2016-12-10 13:03:22' AND `data`='中文' AND `id`=3 LIMIT 1; #start 763 end 954 LÖSCHEN AUS `test`.`test3`, WO `addtime`='2016-12-10 13:03:38' UND `data`='english' UND `id`=4 LIMIT 1; #start 981 end 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 end 1147 UPDATE `test`.`test3` SET `addtime`='2016-12-10 13:03:22', `data`='中文', `id`=3 WHERE `addtime`='2016-12-10 12:00:00' AND `data`='中文' AND `id`=3 LIMIT 1; #start 763 end 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 Eine ausführliche Einführung in Flashback finden Sie unter „Flashback Principle and Practice“ im Beispielverzeichnis example/mysql-flashback-priciple-and-practice.md Die Originaldaten der TBL-Tabelle in der Testbibliothek 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 | +----+--------+---------------------+ 4 Zeilen im Satz (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: 1. Melden Sie sich bei MySQL an und zeigen Sie die aktuelle Binlog-Datei an mysql> Masterstatus anzeigen; +------------------+------------+ | Protokollname | Dateigröße | +------------------+------------+ |mysql-bin.000051 | 967 | |mysql-bin.000052 | 965 | +------------------+------------+ 2. Die neueste Binärprotokolldatei ist mysql-bin.000052. Suchen wir den Binärprotokollspeicherort der fehlerhaften SQL-Operation. 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 das Rollback-SQL zu generieren, und prüfen, ob das Rollback-SQL korrekt ist (Hinweis: In einer realen Umgebung 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 Das Obige ist eine schnelle Lösung für das vom Editor eingeführte Problem des versehentlichen Löschens von MySQL-Daten. Ich hoffe, es wird allen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
<<: JavaScript zur Implementierung eines einfachen Web-Rechners
Manche Leute sagen, dass IE9 die zweite Revolutio...
Inhaltsverzeichnis Vorwort 🍹Vorbereitung 🍲vue3-Nu...
Inhaltsverzeichnis Vorwort 1. 404 Seite 1. Ursach...
Die traditionelle Methode besteht darin, ein Quad...
1. Stoppen Sie zuerst den Datenbankserver Dienst ...
Eine Optimierungslösung, wenn ein einzelner MySQL...
Jeder kennt das Meta-Tag im Weblayout von Desktop...
Das MySQL auf dem Server ist in der Version 8.0.1...
Das 10-tägige Tutorial verwendet eine äußerst ver...
Vorwort In diesem Artikel wird die Verwendung des...
1. Erstellen Sie ein SpringBoot-Projekt und packe...
Inhaltsverzeichnis Fügen Sie dem Tree-Element Cod...
Herstellen einer Verbindung mit MySQL Hier verwen...
1. Feste Breite + adaptiv Erwarteter Effekt: fest...
1. Textformatierung: Dieses Beispiel zeigt, wie T...