Heim  >  Artikel  >  Datenbank  >  Ausführliche Erläuterung des Beispielcodes für die Umstellung der herkömmlichen Replikation auf die GTID-Replikation im MySQL 5.7-Non-Stop-Business

Ausführliche Erläuterung des Beispielcodes für die Umstellung der herkömmlichen Replikation auf die GTID-Replikation im MySQL 5.7-Non-Stop-Business

黄舟
黄舟Original
2017-03-21 13:20:56929Durchsuche

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.


2. Der Wert von gtid_mode aller MySQL in der aktuellen Topologie ist ausgeschaltet.


3. Die folgenden Schritte sind alle in Ordnung, überspringen Sie nicht.


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 GTID

ON Die neue Transaktion ist GTID, Slave akzeptiert nur Transaktionen mit GTID

Hinweis: Die Sache ist, dass sich diese Werte der Reihe nach ändern, das heißt

offb6fe9feb9d4c7afa9e35009a988b8cc2OFF_PERMISSIVEb6fe9feb9d4c7afa9e35009a988b8cc2ON_PERMISSIVE<---> ; ON

kann nicht zur Ausführung springen und meldet einen Fehler.

Schritt 1:

Setzen Sie

ENFORCE_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)
Sie können das Programm verwenden, um alle SQL-Anweisungen zu überprüfen, oder Sie können es festlegen und das Fehlerprotokoll für einen bestimmten Zeitraum beobachten

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)
_COUNT

Sie müssen warten, bis diese Variable 0 ist

Schritt6:
[zejin] 3301>SHOW STATUS LIKE &#39;ONGOING_ANONYMOUS_TRANSACTION_COUNT&#39;;
+-------------------------------------+-------+
| Variable_name      | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0  |
+-------------------------------------+-------+
row in set (0.02 sec)
 
 
[zejin] 3302>SHOW STATUS LIKE &#39;ONGOING_ANONYMOUS_TRANSACTION_COUNT&#39;;
+-------------------------------------+-------+
| Variable_name      | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0  |
+-------------------------------------+-------+
row in set (0.02 sec)
Stellen Sie sicher, dass alle anonymen Transaktionen (Nicht-GTID-Transaktionen) ) wurden vollständig auf alle Server repliziert.

Überprüfungsmethode:

Ü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
……
oder der Slave verwendet direkt die

-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(&#39;binlog57.000005&#39;, 154);
+-----------------------------------------+
| MASTER_POS_WAIT(&#39;binlog57.000005&#39;, 154) |
+-----------------------------------------+
|          0 |
+-----------------------------------------+
row in set (0.00 sec)
Bestätigen Sie, dass in der gesamten Topologie keine anonymen Transaktionen vorhanden sind. Wenn alle zuvor generierten anonymen Transaktionen abgeschlossen wurden, sollten keine vorhanden sein Anonyme Transaktionen auch im Binärprotokoll. Sie können

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)
my.cnf, gtid-mode=ON hinzufügen

Ü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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn