GTID的复制模式不能跳跃式更改,必须按以下步骤更改。 在主从服务器上都设置:
> set @@GLOBAL.ENFORCE_GTID_CONSISTENCY=WARN; Query OK, 0 rows affected (0.01 sec)
此时,需观察错误日志中是否有报错语句,若有需调整改语句。调整完毕后,主从上都设置,确保所有事务符合GTID一致性:
mysql> set @@GLOBAL.ENFORCE_GTID_CONSISTENCY=ON; Query OK, 0 rows affected (0.00 sec)
在主从上依次调整GTID模式:
mysql> set @@GLOBAL.GTID_MODE=OFF_PERMISSIVE; Query OK, 0 rows affected (0.01 sec) mysql> set @@GLOBAL.GTID_MODE=ON_PERMISSIVE; Query OK, 0 rows affected (0.03 sec)
在所有从库上查看正在进行的匿名事务,必须为0才能进行下一步。
mysql> show status like 'ongoing_anonymous_transaction_count'; +-------------------------------------+-------+ | Variable_name | Value | +-------------------------------------+-------+ | Ongoing_anonymous_transaction_count | 0 | +-------------------------------------+-------+ 1 row in set (0.00 sec)
在每一台主从上开启GTID:
mysql> set @@GLOBAL.GTID_MODE=ON; Query OK, 0 rows affected (0.01 sec) mysql> show variables like '%gtid%'; +----------------------------------+-----------+ | Variable_name | Value | +----------------------------------+-----------+ | binlog_gtid_simple_recovery | ON | | enforce_gtid_consistency | ON | | gtid_executed_compression_period | 1000 | | gtid_mode | ON | | gtid_next | AUTOMATIC | | gtid_owned | | | gtid_purged | | | session_track_gtids | OFF | +----------------------------------+-----------+ 8 rows in set (0.01 sec)
然后在从库上重启复制:
mysql> stop slave; Query OK, 0 rows affected (0.00 sec) mysql> change master to master_auto_position=1; Query OK, 0 rows affected (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec)
在从库上查看复制状态:
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.252.3 Master_User: mysync Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000009 Read_Master_Log_Pos: 441 Relay_Log_File: mysql2-relay-bin.000002 Relay_Log_Pos: 654 Relay_Master_Log_File: mysql-bin.000009 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: 441 Relay_Log_Space: 862 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: 100 Master_UUID: db30f0a2-5ed4-11eb-b562-000c290059a2 Master_Info_File: mysql.slave_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: db30f0a2-5ed4-11eb-b562-000c290059a2:1 Executed_Gtid_Set: db30f0a2-5ed4-11eb-b562-000c290059a2:1 Auto_Position: 1 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)
可以看到显示了gtid编号(Retrieved_Gtid_Set,Executed_Gtid_Set)。 最后,记得将以下参数写入主从的my.cnf:
gtid_mode=on enforce_gtid_consistency=on
