Ü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
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
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)
3.2 Vorteile (im Vergleich zu mysqlbinlog)
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:
|
<<: Zusammenfassung von 9 hervorragenden Codevergleichstools, die unter Linux empfohlen werden
>>: Natives js zum Erreichen eines einfachen Karusselleffekts
In diesem Artikel wird der Datenanzeigecode für d...
Inhaltsverzeichnis Schmutzige Seiten (Speichersei...
Vorwort Der SQL-Modus wirkt sich auf die von MySQ...
Inhaltsverzeichnis 1. Einführung in Rechnerfunkti...
Wir alle wissen, dass die in der Front-End-Entwic...
MySQL ist eine relativ einfach zu verwendende rel...
Wenn dieselbe Funktion und derselbe HTML-Code meh...
Neben der Festlegung von Vorschriften für verschi...
Inhaltsverzeichnis Die Beziehung zwischen der Kon...
Vor Kurzem mussten wir eine geplante Migration de...
Dieser Effekt tritt am häufigsten auf unserer Bro...
Inhaltsverzeichnis Ändern der Repository-Quelle S...
XML dient der Beschreibung, Speicherung, Übertrag...
In der Datenbank führen sowohl die Schlüsselwörte...
<br />Ich war schon immer der Meinung, dass ...