Lösung für das Problem, dass synchrone Replikationsfehler im MySQL5.6 GTID-Modus nicht übersprungen werden können

Lösung für das Problem, dass synchrone Replikationsfehler im MySQL5.6 GTID-Modus nicht übersprungen werden können

Datenbankversion:

mysql> select version();

+------------+
| version() |
+------------+
| 5.6.10-Protokoll |
+------------+
1 Zeile im Satz (0,02 Sek.)

Informationen zur synchronen Replikation:

mysql> show slave status\G;

*************************** 1. Reihe ***************************
Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
Master_Host: 192.168.8.25
Master_Benutzer: repl
Master_Port: 3306
Verbindungswiederholung: 60
Master_Log_File:mysql-bin.000007
Read_Master_Log_Pos: 5036
Relay-Log-Datei: M2-relay-bin.000008
Relay_Log_Pos: 408
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Ja
Slave_SQL_Running: Nein
Replicate_Do_DB:
Replicate_Ignore_DB: mysql
Tabelle_replizieren:
Tabelle_Ignorieren_replizieren:
Wild_Do_Tabelle replizieren:
Tabelle_Wild_Ignore_replizieren:
Letzte_Fehlernummer: 1062
Last_Error: Write_rows-Ereignis konnte für Tabelle test.t nicht ausgeführt werden; doppelter Eintrag „12“
für Schlüssel 'PRIMARY', Fehlercode: 1062; Handler-Fehler HA_ERR_FOUND_DUPP_KEY; das Hauptprotokoll des Ereignisses mysql-bin.000007,
end_log_pos 2267
Skip_Counter: 0
Exec_Master_Log_Pos: 2045
Relay_Log_Space: 3810
Until_Condition: Keine
Bis_Log_Datei:
Bis_Log_Pos: 0
Master_SSL_Allowed: Nein
Master_SSL_CA_Datei:
Master_SSL_CA_Pfad:
Master_SSL_Zertifikat:
Master_SSL_Chiffre:
Master_SSL_Schlüssel:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: Nein
Last_IO_Errno: 0
Letzter_E/A-Fehler:
Last_SQL_Errno: 1062
Last_SQL_Error: Write_rows-Ereignis konnte für Tabelle test.t nicht ausgeführt werden; doppelter Eintrag „12“
für Schlüssel 'PRIMARY', Fehlercode: 1062; Handler-Fehler HA_ERR_FOUND_DUPP_KEY; das Hauptprotokoll des Ereignisses mysql-bin.000007,
end_log_pos 2267
Server-IDs replizieren_ignorieren:
Master_Server_Id: 25
Master_UUID: cf716fda-74e2-11e2-b7b7-000c290a6b8f
Master_Info_Datei: /usr/local/mysql/data2/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Zeitstempel des letzten IO-Fehlers:
Letzter SQL-Fehlerzeitstempel: 130313 07:24:43
Master_SSL_Crl:
Master_SSL_Crlpfad:
Abgerufen_Gtid_Set: cf716fda-74e2-11e2-b7b7-000c290a6b8f:141-151
Ausgeführtes_Gtid_Set: cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-140
Auto_Position: 1
1 Zeile im Satz (0,02 Sek.)

FEHLER:
Keine Abfrage angegeben

Es kommt zu einem Primärschlüsselkonflikt. Da es sich um eine Testmaschine handelt, überspringe ich diesen direkt.

mysql> set global sql_slave_skip_counter=1;

FEHLER 1858 (HY000): sql_slave_skip_counter kann nicht festgelegt werden, wenn der Server mit GTID_MODE = ON ausgeführt wird.
Generieren Sie stattdessen für jede Transaktion, die Sie überspringen möchten, eine leere Transaktion mit derselben GTID wie die Transaktion

Tipp: Da es im GTID-Modus ausgeführt wird, wird die Syntax sql_slave_skip_counter nicht unterstützt. Wenn Sie überspringen möchten, müssen Sie die Transaktions-ID auf einen Nullwert setzen.
Es scheint, dass dies die einzige Methode ist.

mysql> show global variables like '%GTID%';

+--------------------------+-----------------------------------------+
| Variablenname | Wert |
+--------------------------+-----------------------------------------+
| enforce_gtid_consistency | EIN |
| gtid_executed | cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-140 |
| gtid_mode | EIN |
| gtid_owned | |
| gtid_purged | cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-140 |
+--------------------------+-----------------------------------------+
5 Zeilen im Satz (0,04 Sek.)

mysql> setze global gtid_executed='';
FEHLER 1238 (HY000): Die Variable „gtid_executed“ ist eine schreibgeschützte Variable.
MySQL>
mysql> globales gtid_purged='' festlegen;

FEHLER 1840 (HY000): GTID_PURGED kann nur festgelegt werden, wenn GTID_EXECUTED leer ist.
Frustrierend, direkte Einstellungen funktionieren nicht.

Nachdem ich das Handbuch überprüft hatte, stellte ich fest, dass ich „Reset Master“ ausführen muss (Hinweis: Führen Sie es auf dem Slave aus, niemals auf dem Master).

mysql> Master zurücksetzen;
Abfrage OK, 0 Zeilen betroffen (0,16 Sek.)

mysql> Slave zurücksetzen;
FEHLER 1198 (HY000): Dieser Vorgang kann nicht bei laufendem Slave ausgeführt werden. Führen Sie zuerst STOP SLAVE aus.
mysql> Slave stoppen;
Abfrage OK, 0 Zeilen betroffen (0,08 Sek.)

mysql> Slave zurücksetzen;
Abfrage OK, 0 Zeilen betroffen (0,16 Sek.)

Der Zweck der Ausführung von „Reset Slave“ besteht darin, master.info und relay-log.info zu löschen, sodass Sie später die Master- auf Master-Slave-Replikation umstellen können.
Erinnern Sie sich an den Punkt gtid_purged gerade eben? Setzen Sie einfach den nächsten Punkt zurück.

Hier sind die Schritte:

mysql> zeige globale Variablen wie „%GTID%“;
+--------------------------+----------+
| Variablenname | Wert |
+--------------------------+----------+
| enforce_gtid_consistency | EIN |
| gtid_ausgeführt | |
| gtid_mode | EIN |
| gtid_owned | |
| gtid_purged | |
+--------------------------+----------+
5 Zeilen im Satz (0,06 Sek.)

mysql> setze global gtid_purged='cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-141';
Abfrage OK, 0 Zeilen betroffen (0,16 Sek.)

mysql> ÄNDERN SIE MASTER IN MASTER_HOST='192.168.8.25',MASTER_USER='repl',MASTER_PASSWORD='repl'
,MASTER_AUTO_POSITION = 1;
Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,32 Sek.)

mysql> Slave starten;
Abfrage OK, 0 Zeilen betroffen (0,13 Sek.)

mysql> Slave-Status anzeigen\G;
*************************** 1. Reihe ***************************
Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
Master_Host: 192.168.8.25
Master_Benutzer: repl
Master_Port: 3306
Verbindungswiederholung: 60
Master_Log_File:mysql-bin.000007
Read_Master_Log_Pos: 5036
Relay-Log-Datei: M2-relay-bin.000008
Relay_Log_Pos: 408
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Ja
Slave_SQL_Running: Nein
Replicate_Do_DB:
Replicate_Ignore_DB: mysql
Tabelle_replizieren:
Tabelle_Ignorieren_replizieren:
Wild_Do_Tabelle replizieren:
Tabelle_Wild_Ignore_replizieren:
Letzte_Fehlernummer: 1050
Last_Error: Fehler „Tabelle ‚t0‘ ist bereits vorhanden“ bei der Abfrage.
Standarddatenbank: „Test“. Abfrage: „Tabelle t0 wie t erstellen“
Skip_Counter: 0
Exec_Master_Log_Pos: 2298
Relay_Log_Space: 3557
Until_Condition: Keine
Bis_Log_Datei:
Bis_Log_Pos: 0
Master_SSL_Allowed: Nein
Master_SSL_CA_Datei:
Master_SSL_CA_Pfad:
Master_SSL_Zertifikat:
Master_SSL_Chiffre:
Master_SSL_Schlüssel:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: Nein
Last_IO_Errno: 0
Letzter_E/A-Fehler:
Last_SQL_Errno: 1050
Last_SQL_Error: Fehler „Tabelle ‚t0‘ ist bereits vorhanden“ bei der Abfrage.
Standarddatenbank: „Test“. Abfrage: „Tabelle t0 wie t erstellen“
Server-IDs replizieren_ignorieren:
Master_Server_Id: 25
Master_UUID: cf716fda-74e2-11e2-b7b7-000c290a6b8f
Master_Info_Datei: /usr/local/mysql/data2/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Zeitstempel des letzten IO-Fehlers:
Letzter SQL-Fehlerzeitstempel: 130313 07:50:42
Master_SSL_Crl:
Master_SSL_Crlpfad:
Abgerufen_Gtid_Set: cf716fda-74e2-11e2-b7b7-000c290a6b8f:142-151
Ausgeführtes_Gtid_Set: cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-141
Auto_Position: 1
1 Zeile im Satz (0,02 Sek.)

FEHLER:
Keine Abfrage angegeben
### Sehen Sie, die Fehlermeldung hier ist anders. Wiederholen Sie diese Methode, bis die synchrone Replikation normal ist.

mysql> Slave stoppen;
Abfrage OK, 0 Zeilen betroffen (0,07 Sek.)

mysql> Master zurücksetzen;
Abfrage OK, 0 Zeilen betroffen (0,17 Sek.)

mysql> Slave zurücksetzen;
Abfrage OK, 0 Zeilen betroffen (0,16 Sek.)

mysql> setze global gtid_purged='cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-151';
Abfrage OK, 0 Zeilen betroffen (0,13 Sek.)

mysql> ÄNDERN SIE MASTER IN MASTER_HOST='192.168.8.25',MASTER_USER='repl',MASTER_PASSWORD='repl'
,MASTER_AUTO_POSITION = 1;
Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,33 Sek.)

mysql> Slave starten;
Abfrage OK, 0 Zeilen betroffen (0,11 Sek.)

mysql> Slave-Status anzeigen\G;
*************************** 1. Reihe ***************************
Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
Master_Host: 192.168.8.25
Master_Benutzer: repl
Master_Port: 3306
Verbindungswiederholung: 60
Master_Log_File:mysql-bin.000007
Read_Master_Log_Pos: 5036
Relay-Log-Datei: M2-relay-bin.000008
Relay_Log_Pos: 408
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Ja
Slave_SQL_Running: Ja
Replicate_Do_DB:
Replicate_Ignore_DB: mysql
Tabelle_replizieren:
Tabelle_Ignorieren_replizieren:
Wild_Do_Tabelle replizieren:
Tabelle_Wild_Ignore_replizieren:
Last_Errno: 0
Letzter_Fehler:
Skip_Counter: 0
Exec_Master_Log_Pos: 5036
Relay_Log_Space: 819
Until_Condition: Keine
Bis_Log_Datei:
Bis_Log_Pos: 0
Master_SSL_Allowed: Nein
Master_SSL_CA_Datei:
Master_SSL_CA_Pfad:
Master_SSL_Zertifikat:
Master_SSL_Chiffre:
Master_SSL_Schlüssel:
Sekunden_Hinter_Master: 0
Master_SSL_Verify_Server_Cert: Nein
Last_IO_Errno: 0
Letzter_E/A-Fehler:
Last_SQL_Errno: 0
Letzter_SQL_Fehler:
Server-IDs replizieren_ignorieren:
Master_Server_Id: 25
Master_UUID: cf716fda-74e2-11e2-b7b7-000c290a6b8f
Master_Info_Datei: /usr/local/mysql/data2/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Der Slave hat das gesamte Relay-Protokoll gelesen und wartet auf die Aktualisierung durch den Slave-E/A-Thread.
Master_Retry_Count: 86400
Master_Bind:
Zeitstempel des letzten IO-Fehlers:
Letzter_SQL_Fehler_Zeitstempel:
Master_SSL_Crl:
Master_SSL_Crlpfad:
Abgerufenes_Gtid_Set:
Ausgeführtes_Gtid_Set: cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-151
Auto_Position: 1
1 Zeile im Satz (0,01 Sek.)

FEHLER:
Keine Abfrage angegeben

Haha, es ist endlich gelöst. Es war so ein lästiges Problem. Wenn Sie eine bessere und bequemere Lösung haben, antworten Sie mir bitte, danke.

Das könnte Sie auch interessieren:
  • Detaillierte Einführung in den GTID-Modus der MySQL Master-Slave-Replikation
  • MySQL-Datenbank GTID realisiert Master-Slave-Replikation (super praktisch)
  • Ein Beispiel für die Umstellung der traditionellen Replikation auf GTID-Replikation ohne Geschäftsunterbrechung in MySQL 5.7
  • Detaillierte Erläuterung der MySQL Master-Slave-Replikationspraxis - GTID-basierte Replikation
  • MySQL 5.6 Master-Slave-Replikation basierend auf GTID
  • Tutorial zur Verwendung des GTIDs-Replikationsprotokolls und des Ausfallprotokolls in MySQL
  • Spezifische Verwendung der GTID-Replikation bei der MySQL-Replikation

<<:  Tipps zur Implementierung von Listenschleifen-Scrollen basierend auf jQuery (super einfach)

>>:  Lösen Sie das Problem, dass der häufig verwendete Linux-Befehl "ll" ungültig ist oder der Befehl nicht gefunden wird

Artikel empfehlen

mysql drei Tabellen verbunden, um eine Ansicht zu erstellen

Drei Tabellen sind miteinander verbunden. Feld a ...

Bootstrap realisiert den Karusselleffekt

In diesem Artikel wird der spezifische Code von B...

Perfekte Lösung zur vertikalen Zentrierung von Formelementen

Code kopieren Der Code lautet wie folgt: <!DOC...

Drei Möglichkeiten zum Kopieren von MySQL-Tabellen (Zusammenfassung)

Tabellenstruktur und deren Daten kopieren Die fol...

Tutorial zur Konfiguration des Nginx/Httpd-Reverseproxys für Tomcat

Im vorherigen Blog erfuhren wir die Verwendung un...

MySQL-Kill-Befehl – ​​Verwendungshandbuch

KILL [VERBINDUNG | ABFRAGE] Prozesslisten-ID In M...

Apropos ContentType(s) von image/x-png

Dies führte auch dazu, dass PNG-Dateien nicht hoch...

Implementierung der Navigationsleiste und des Dropdown-Menüs in CSS

1. CSS-Navigationsleiste (1) Funktion der Navigat...

Vite2.0 Fallstricke

Inhaltsverzeichnis Optimierung des Vite-Projektau...

So fügen Sie MySQL Indizes hinzu

Hier ist eine kurze Einführung in Indizes: Der Zw...

So verweisen Sie im WeChat-Applet wxss auf externe CSS-Dateien und Iconfonts

Ursache So importieren Sie externe Dateien in ein...

MySQL 8.0.12 Installations- und Nutzungs-Tutorial

Das Installations- und Verwendungstutorial für My...

Lösen Sie das domänenübergreifende Problem von Vue + SpringBoot + Shiro

Inhaltsverzeichnis 1. Konfigurieren Sie das Vue-F...

Tutorial zu den Grundlagen von JavaScript und JQuery Framework

Inhaltsverzeichnis 1. JS-Objekt DOM –1, Funktion ...