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

...

Zusammenfassung von 76 Erfahrungspunkten der User Experience

Klassifizierung der Website-Erfahrung 1. Sinneser...

Linux Redis-Sentinel-Konfigurationsdetails

herunterladen Download-Adresse: https://redis.io/...

Starten Sie alle gestoppten Docker-Container mit einem Befehl neu

Starten Sie alle gestoppten Docker-Container mit ...

Einfaches Beispiel zum Hinzufügen und Entfernen von HTML-Knoten

Einfaches Beispiel für das Hinzufügen und Entfern...

Einige Erfahrungen zum Aktivieren von HTTPS

Da sich die heimische Netzwerkumgebung immer weit...

CSS-Implementierungscode für verzerrte Schatten

Dieser Artikel stellt den Implementierungscode vo...

So installieren und ändern Sie das Anfangskennwort von mysql5.7.18

Informationen zur Centos-Installation von MySQL f...

Einführung in HTML_PowerNode Java Academy

Was ist HTML? HTML ist eine Sprache zur Beschreib...

js-Speicherleckszenarien, wie man sie im Detail überwacht und analysiert

Inhaltsverzeichnis Vorwort Welche Situationen kön...