Detaillierte Erläuterung der Verwendung von binlog2sql zum schnellen Rollback nach einem MySQL-Fehler

Detaillierte Erläuterung der Verwendung von binlog2sql zum schnellen Rollback nach einem MySQL-Fehler

Vorwort

Bei der täglichen Arbeit oder beim Studium ist es unvermeidlich, dass Sie aufgrund von „Unachtsamkeit“ beim Bedienen der Datenbank Fehler machen. Wenn Sie schnell wiederherstellen müssen, ist es unwahrscheinlich, dass dies durch ein Backup möglich ist. Der folgende Artikel stellt hauptsächlich die Methode zur Verwendung von binlog2sql vor, um nach einem Mysql-Fehlbetrieb schnell zurückzusetzen. Schauen wir uns ohne weiteres die detaillierte Einführung an:

1. Allgemeine Erklärung:

DML (Datenmanipulationssprache):

Dabei handelt es sich um SELECT, UPDATE, INSERT und DELETE. Wie die Namen vermuten lassen, werden diese vier Befehle verwendet, um mit den Daten in der Datenbank zu arbeiten.

DDL (Datendefinitionssprache):

DDL hat mehr Befehle als DML. Die wichtigsten Befehle sind CREATE, ALTER, DROP usw. DDL wird hauptsächlich verwendet, um die Struktur einer Tabelle, Datentypen, Links und Einschränkungen zwischen Tabellen und andere Initialisierungsaufgaben zu definieren oder zu ändern. Sie werden hauptsächlich beim Erstellen einer Tabelle verwendet.

DCL (Datensteuerungssprache):

Es handelt sich um eine Datenbanksteuerungsfunktion. Es wird verwendet, um die Berechtigungen von Datenbankbenutzern oder -rollen festzulegen oder zu ändern, einschließlich Anweisungen zum Gewähren, Verweigern, Widerrufen usw. Standardmäßig haben nur sysadmin, dbcreator, db_owner oder db_securityadmin die Berechtigung, DCL auszuführen.

2. Installation von binlog2sql

Analysieren Sie das gewünschte SQL aus dem MySQL-Binärprotokoll. Abhängig von den Optionen können Sie das ursprüngliche SQL abrufen, SQL zurücksetzen, SQL ohne Primärschlüssel einfügen usw.

2.1. Zweck

  •  Schnelles Daten-Rollback (Flashback)
  • Behebung von Dateninkonsistenzen nach Master-Slave-Umschaltung
  • Generieren Sie Standard-SQL aus Binlog und bringen Sie abgeleitete Funktionen ein

2.2 Installation

# cd /usr/local
# git-Klon https://github.com/danfengcao/binlog2sql.git
# ls 
binlog2sql Spiele Java lib64 MariaDB sbin src 
# cd binlog2sql
# pip install -r Anforderungen.txt
-bash: pip: Befehl nicht gefunden
 -------------Pip-Tool installieren-------------
# wget https://bootstrap.pypa.io/get-pip.py 
# python get-pip.py
# pip -V # Pip-Version pip 9.0.1 von /usr/lib/python2.7/site-packages anzeigen (Python 2.7)
# pip install -r Anforderungen.txt
Anforderung bereits erfüllt: PyMySQL==0.7.8 in /usr/lib/python2.7/site-packages (aus -r requirements.txt (Zeile 1))
Anforderung bereits erfüllt: wheel==0.24.0 in /usr/lib/python2.7/site-packages (aus -r requirements.txt (Zeile 2))
Anforderung bereits erfüllt: mysql-replication==0.9 in /usr/lib/python2.7/site-packages (aus -r requirements.txt (Zeile 3))

2.3. Der vom Benutzer benötigte Mindestsatz an Berechtigungen:

Es wird empfohlen, ausgewählte Super-/Replikations-Clients und Replikations-Slaves zu berechtigen.

mysql > GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* an flashback@'localhost', identifiziert durch 'flashback';
mysql > GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* an flashback@'127.0.0.1', identifiziert durch 'flashback';

2.4 Grundlegende Verwendung

Standard-SQL analysieren

Shell> Python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -ddatabase -t Tabelle1 Tabelle2 --start-file='mysql-bin.000002' --start-datetime='2017-01-12 18:00:00' --stop-datetime='2017-01-12 18:30:00' --start-pos=1240

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

3. Prüfung:

3.1. Neue Tabelle „Benutzer“ erstellen

create table cope_users like info_users; # Eine neue Tabelle erstellen insert into cope_users select * from info_users limit 500; # 500 Datenzeilen einfügen delete from cope_users where id<20; # 20 Datenzeilen löschen

3.2. Standard-SQL analysieren

# python /usr/local/binlog2sql/binlog2sql/binlog2sql.py -uflashback -pflashback -dttt -tusers --start-file='mysql-bin.000034' --start-datetime='2017-07-11 15:10:00' --stop-datetime='2017-07-11 15:12:00'
Löschen Sie aus "ttt ".`users`, wobei` uid` = '0e8e2609c748bbbbbb052d7' und `ip` = '172.16.208.32' und` sex` = 0 und 'app_ver` =' 5. 'und `Device_type` = 2 und `Guides` = = = 2 und` = 2 und ` `id` = 1 und` latitude` = '' und ad_time` = 1481602080 und `recharge_time` = 0 und` token_change_time` = 1481602129 und `expire_time` = 0 und` nickname` = '阿超' und `device_ID` = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 7d64b79e8 'und `push_key` =' 'und' Level` = 0 und 'Mobile` =' 188108955535 'und" Einstellungen "=' 'und" Longitude "=' 'und" Signature "=' 'und" OS_VER` =' 'Limit 1;
DELETE FROM `ttt`.`users` WHERE `uid`='b5cfbdb4205b56703a97' AND `ip`='172.16.208.48' AND `sex`=0 AND `app_ver`='5.2.2' AND `device_type`=2 AND `guides`='' AND `last_login_time`=1481602096 AND `id`=2 AND `latitude`='' AND `add_time`=1481602096 AND `recharge_time`=0 AND `token_change_time`=1481602096 AND `expire_time`=0 AND `nickname`='家长091410' AND `device_id`='fedea666076a7906be53523acc7a8b32811354fe' AND `push_key`='7759d6772c9851a2bfc13835a3d7e7da' AND `level`=0 AND `mobile`='13629470521' AND `settings`='' AND `longitude`='' AND `signature`='' AND `os_ver`='' LIMIT 1; #start 79078 end 83053 time 2017-07-11 15:11:50

3.3. Analysieren Sie das Rollback-SQL

# python /usr/local/binlog2sql/binlog2sql/binlog2sql.py --flashback -h127.0.0.1 -P3306 -uflashback -pflashback -dttt -tusers --start-file='mysql-bin.000034' --start-position=79078 --stop-position=83053

Überprüfen Sie das analysierte SQL. Wenn es korrekt ist, können Sie es in die SQL-Datei /data/backup/rollback.sql drucken.

# python /usr/local/binlog2sql/binlog2sql/binlog2sql.py --flashback -uflashback -pflashback -dttt -tusers --start-file='mysql-bin.000034' --start-position=79078 --stop-position=83053> /data/backup/rollback.sql
# Katze /data/backup/rollback.sql 
`id`, `latitude`, `add_time`, `recharge_time`, `token_change_time`, `expire_time`, `nickname`, `device_id`, `push_key`, `level`, `mobile`, `settings`, `longitude`, `signature`, `os_ver`) VALUES ('24667530f4b16a446b3e', '172.16.218.75', 0, '5.2.93', 3, '{\"2103\":1,\"2100\":1,\"2101\":1,\"2102\":1,\"2104\":1,\"2105\":1}', 1490239125, 19, '', 1481610680, 0, 1490239125, 0, 'zf', 'da75b093-bd22-48f6-bbb1-d3296e29e9b5', 'be05183f80a96e788e0b0a99d1275392', 0, '15101538925', '', '', '', ''); #start 79078 end 83053 time 2017-07-11 15:11:50
Einfügen in `ttt`.`users` , "push_key", "Level", "Mobile", "Einstellungen", "Längengrad", "Signatur", "os_ver`) Werte (" 77e50b4910a9389057ed "," 172.16.218.371610, "," 5.2.1.14 ", 3, 3,", ",", "14887835", ", 3,", ",", ",", ",", ",", "," 517, 0, 1488787835, 0, '陈俊宇', ED0A273D-74DE-4173-92C6-55D92597BC79 ',' ', 0,' 18612482272 ',', 116.306826 'Timing 8307-23-23,'); : 50

MySQL-Verbindungskonfiguration

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

Parsing-Modus

  • --realtime Binlog kontinuierlich synchronisieren. Optional. Wenn es nicht hinzugefügt wird, werden die Daten beim Ausführen des Befehls mit der neuesten Binlog-Position synchronisiert.
  • --popPk Entfernt den Primärschlüssel aus INSERT-Anweisungen. Optional.
  • -B, --flashback Rollback-Anweisungen generieren. Optional. Kann nicht gleichzeitig mit Realtime oder PopPk hinzugefügt werden.

Steuerung des Auflösungsbereichs

  • --start-file Beginnen Sie mit der Dateianalyse. muss.
  • --start-pos Die Startanalyseposition der Startdatei. Optional. Der Standard ist die Startposition der Startdatei.
  • --end-file Ende der Dateianalyse. Optional. Standardmäßig ist die gleiche Datei als Startdatei festgelegt. Wenn der Analysemodus auf Echtzeit eingestellt ist, hat diese Option keine Auswirkung.
  • --end-pos Die Endanalyseposition der Enddatei. Optional. Der Standardwert ist die letzte Position der Dateiendung. Wenn der Analysemodus auf Echtzeit eingestellt ist, ist diese Option ungültig.

Objektfilterung

  • -d, --databases gibt nur das SQL der Zieldatenbank aus. Optional. Der Standardwert ist leer.
  • -t, --tables gibt nur das SQL der Zieltabellen aus. Optional. Der Standardwert ist leer.

3.4. Starten Sie das Rollback

# mysql -uroot -p000000 < /data/backup/rollback.sql

3.5. Überprüfung der Login-Datenbank

IV. Vorsichtsmaßnahmen

4.1. In der Konfigurationsdatei werden folgende Parameter gesetzt:

Server-ID = 1
log_bin = /data/mysql/mysql-bin.log
max_binlog_size = 1 G
binlog_format = Zeile
binlog_row_image = voll # Standard

4.2. Der MySQL-Dienst muss während des Flashbacks gestartet werden

Da der Binlog-Inhalt über das BINLOG_DUMP-Protokoll abgerufen wird, muss die serverseitige Tabelle information_schema.COLUMNS gelesen werden, um die Metadaten der Tabellenstruktur abzurufen, bevor sie in SQL-Anweisungen eingefügt werden können. Daher müssen den Benutzern mindestens die folgenden Berechtigungen erteilt werden:

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'Benutzer'@'%';

Im Quellcode wird die Python-MySQL-Replikation hauptsächlich als Echtzeitanalyse des MySQL-Binärprotokolls verwendet, um jedes EREIGNIS abzurufen. python-mysql-replication implementiert das MySQL-Replikationsprotokoll. Der Client gibt sich als Slave aus, um das Binärprotokoll und das Ereignis des Masters abzurufen.

4.3. In den meisten Fällen können Standard-SQL und Rollback-SQL zum Einfügen, Aktualisieren und Löschen analysiert werden.

Eine Ausnahme: nach Einfüge-, Aktualisierungs-, Löschvorgängen, Löschen/Abschneiden der Tabelle. Obwohl zu diesem Zeitpunkt alle Ereignisse in Binlog aufgezeichnet werden, kann die entsprechende Tabelle der DML-Operation nicht mehr gefunden werden, wenn binlog2sql zum Generieren von Standard-SQL und Rollback-SQL verwendet wird.

4.4. DDL kann binlog2sql nicht zum Flashback von Daten verwenden.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels Ihnen bei Ihrem Studium oder Ihrer Arbeit helfen kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detailliertes Installations- und Konfigurationstutorial zum MySQL-Flashback-Tool binlog2sql
  • Detaillierte Schritte zum Konfigurieren von mysql8.0.20 mit binlog2sql und einfacher Sicherung und Wiederherstellung

<<:  Erläuterung der neuen Funktion von Hadoop 2.X, der Papierkorbfunktion

>>:  Erläuterung des Arbeitsmechanismus von Namenode und SecondaryNameNode in Hadoop

Artikel empfehlen

So verwenden Sie die Typerweiterung ohne Typingscript

Vorwort Aufgrund der schwachen Typisierung von JS...

So installieren Sie OpenSuse auf Virtualbox

Die virtuelle Maschine wird auf dem Hostcomputer ...

Optimierung der Datenbank-SQL-Anweisung

Warum optimieren: Beim Start des eigentlichen Pro...

Detaillierte Erklärung der Docker-Nutzung unter CentOS8

1. Installation von Docker unter CentOS8 curl htt...

Mysql-Datumsformatierung und komplexe Datumsbereichsabfrage

Inhaltsverzeichnis Vorwort Anwendungsszenarios fü...

Detaillierte Erklärung der MySQL-Injektion ohne Kenntnis des Spaltennamens

Vorwort Ich habe in letzter Zeit das Gefühl, dass...

So verwenden Sie SessionStorage und LocalStorage in Javascript

Inhaltsverzeichnis Vorwort Einführung in SessionS...

Zwei Möglichkeiten, das WeChat-Miniprogramm mit Tencent Maps zu verbinden

Ich habe kürzlich ein WeChat-Applet geschrieben u...

Zwei Möglichkeiten zum korrekten Bereinigen von MySQL-Binlog-Protokollen

mysql bereinigt Binlog-Protokolle korrekt Vorwort...

Einführung in Linux-Komprimierungs- und Dekomprimierungsbefehle

Inhaltsverzeichnis Gängige Komprimierungsformate:...

Detaillierte Erklärung der KeepAlive-Verwendung in der Vue-Frontend-Entwicklung

Inhaltsverzeichnis Vorwort Keep-Avlive-Hook-Funkt...

JavaScript zum Erreichen eines dynamischen Farbwechsels der Tabelle

In diesem Artikel wird der spezifische Code für J...