mysql从传统复制切换到GTID复制

来源:这里教程网 时间:2026-03-01 15:37:40 作者:

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

相关推荐