Der folgende Editor zeigt Ihnen ein Beispiel für die Umstellung der traditionellen Replikation auf GTID-Replikation in MySQL5.7 Non-Stop-Business. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Herausgeber und werfen wir einen Blick darauf.
Aufgrund der Vorteile von GTID müssen wir die traditionelle datei-pos-basierte Replikation auf GTID-basierte Replikation umstellen Die Details lauten wie folgt:Derzeit haben wir eine M-S-Struktur unter traditioneller Replikation:
Port 3301 Master
Port 3302 Slave
master上(3301): [zejin] 3301>select * from t_users; +----+------+ | id | name | +----+------+ | 1 | hao | | 2 | zhou | +----+------+ rows in set (0.00 sec) slave上(3302): [zejin] 3302>show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.240 Master_User: repl Master_Port: 3301 Connect_Retry: 60 Master_Log_File: binlog57.000002 Read_Master_Log_Pos: 417 Relay_Log_File: zejin240-relay-bin.000004 Relay_Log_Pos: 628 Relay_Master_Log_File: binlog57.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 417 Relay_Log_Space: 884 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 3301 Master_UUID: a97983fc-5a29-11e6-9d28-000c29d4dc3f Master_Info_File: /home/mysql/I3302/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: row in set (0.00 sec) [zejin] 3302>select * from t_users; +----+------+ | id | name | +----+------+ | 1 | hao | | 2 | zhou | +----+------+ rows in set (0.00 sec)
Im Folgenden sind die spezifischen Schritte für die Online-Änderung aufgeführt:
Voraussetzungen:
1. Alle MySQL-Versionen müssen 5.7.6 oder höher sein.Globale Systemvariable hinzufügenGTID_MODE-Variablenwertbeschreibung:
OFF Die neue Transaktion ist nicht GTID, Slave akzeptiert nur Transaktionen ohne GTID ON_PERMISSIVE neue Transaktion. ist GTID, Slave akzeptiert sowohl Transaktionen ohne GTID als auch Transaktionen mit GTIDON Die neue Transaktion ist GTID, Slave akzeptiert nur Transaktionen mit GTIDHinweis: Die Sache ist, dass sich diese Werte der Reihe nach ändern, das heißtoff<--->OFF_PERMISSIVE<--->ON_PERMISSIVE<---> ; ON
kann nicht zur Ausführung springen und meldet einen Fehler.Schritt 1:
Setzen SieENFORCE_GTID_CONSISTENCY auf Warnung. Welche zuerst ausgeführt wird, hat keinen Einfluss auf das Ergebnis.
Hinweis: Wenn nach der Ausführung dieser Anweisung eine inkompatible Anweisungsverwendung mit GTID vorliegt, werden relevante Informationen im Fehlerprotokoll aufgezeichnet. Daher muss das Programm angepasst werden, um inkompatibles Schreiben zu vermeiden . Bis überhaupt keine inkompatiblen Anweisungen generiert werden,
[zejin] 3302>set @@global.enforce_gtid_consistency=warn; Query OK, 0 rows affected (0.00 sec) [zejin] 3301>set @@global.enforce_gtid_consistency=warn; Query OK, 0 rows affected (0.00 sec)
Dieser Schritt ist sehr wichtig. Schritt 2: Setzen Sie ENFORCE_GTID_CONSISTENCY auf ON, was zuerst ausgeführt wird.
Wird in der ersten ausgeführt Schritt Danach können Sie den Wert auf „Ein“ setzen.Schritt 3:
Setzen Sie GTID_MODE auf off_permissiv; welcher zuerst ausgeführt wird, hat keinen Einfluss auf das Ergebnis
[zejin] 3301>set @@global.enforce_gtid_consistency=on; Query OK, 0 rows affected (0.03 sec) [zejin] 3302>set @@global.enforce_gtid_consistency=on; Query OK, 0 rows affected (0.00 sec)
Schritt 4 : Setzen Sie GTID_MODE auf jeder MySQL-Instanz auf on_permissiv;; welches zuerst ausgeführt wird, hat keinen Einfluss auf das Ergebnis
[zejin] 3301>SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; Query OK, 0 rows affected (0.00 sec) [zejin] 3302>SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; Query OK, 0 rows affected (0.00 sec)
Schritt 5:Überprüfen Sie die Variable ONGOING_ANONYMOUS_TRANS auf jeder MySQL-Instanz
AKTION[zejin] 3302>SET @@GLOBAL.GTID_MODE = on_permissive; Query OK, 0 rows affected (0.00 sec) [zejin] 3301>SET @@GLOBAL.GTID_MODE = on_permissive; Query OK, 0 rows affected (0.01 sec)
Sie müssen warten, bis diese Variable 0 ist
Schritt6:[zejin] 3301>SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT'; +-------------------------------------+-------+ | Variable_name | Value | +-------------------------------------+-------+ | Ongoing_anonymous_transaction_count | 0 | +-------------------------------------+-------+ row in set (0.02 sec) [zejin] 3302>SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT'; +-------------------------------------+-------+ | Variable_name | Value | +-------------------------------------+-------+ | Ongoing_anonymous_transaction_count | 0 | +-------------------------------------+-------+ row in set (0.02 sec)
Überprüfen Sie, ob der Wert von Relay_Master_Log_File größer als binlog57.000005 ist,
oder gleich Relay_Master_Log_File ist gleich binlog57.000005 und der Wert von Exec_Master_Log_Pos ist größer oder gleich 154 Sie können
在master上: [zejin] 3301>show master status; +-----------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-----------------+----------+--------------+------------------+-------------------+ | binlog57.000005 | 154 | | | | +-----------------+----------+--------------+------------------+-------------------+ row in set (0.00 sec) 在slave上, [zejin] 3302>show slave status\G *************************** 1. row *************************** …… Relay_Master_Log_File: binlog57.000005 Exec_Master_Log_Pos: 154 ……
-Funktion
:Das Rückgabeergebnis ist größer oder gleich 0 , was bedeutet, dass alle anonymen Transaktionen kopiert wurden
Schritt 7:[zejin] 3302>SELECT MASTER_POS_WAIT('binlog57.000005', 154); +-----------------------------------------+ | MASTER_POS_WAIT('binlog57.000005', 154) | +-----------------------------------------+ | 0 | +-----------------------------------------+ row in set (0.00 sec)
Flush
-Protokolle übergeben und MySQL alte Binärprotokolldateien automatisch bereinigen lassen.Schritt 8: Stellen Sie GTID_MODE auf jeder MySQL-Instanz ein,
Schritt 9: Auf jeder MySQL-Instanz
Im Konfigurationsdatei[zejin] 3301>SET @@GLOBAL.GTID_MODE = ON; Query OK, 0 rows affected (0.04 sec) [zejin] 3302>SET @@GLOBAL.GTID_MODE = ON; Query OK, 0 rows affected (0.04 sec)
Überprüfung: Damit ist die Online-Konvertierung von der traditionellen Replikation zur GTID-Replikation abgeschlossen.
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Beispielcodes für die Umstellung der herkömmlichen Replikation auf die GTID-Replikation im MySQL 5.7-Non-Stop-Business. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!