Ü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
Manchmal möchten wir eine solche Funktion impleme...
Vorwort Wir sagen oft, dass Node keine neue Progr...
Vorwort add_header ist eine Direktive, die im Hea...
Inhaltsverzeichnis Installieren Sie Docker-ce für...
Es besteht ein Unterschied zwischen src und href ...
Inhaltsverzeichnis 1. Wiederholen 1.1. Shop (Bibl...
Verfahren: Nach Beschreibung: Beides kann nicht e...
Beim Webdesign ist es sehr wichtig, eine organisi...
Hintergrund PNG-Bilder benötigen mehr Speicherpla...
In diesem Artikel wird der spezifische Code von v...
Originaldaten und Zieldaten SQL-Anweisungen imple...
Inhaltsverzeichnis Array-Deduplizierung 1 Doppels...
Wenn Sie MySQL zum Abfragen der Datenbank verwend...
Tipp 1: Konzentriert bleiben Die besten mobilen A...
In diesem Artikel wird hauptsächlich die Integrat...