专栏首页mysql-dba传统复制在线变更为GTID复制
原创

传统复制在线变更为GTID复制

mysql版本8.0.25,一主一从

原来复制环境GTID是为开启的

mysql> show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | OFF       |
| gtid_executed                    |           |
| gtid_executed_compression_period | 0         |
| gtid_mode                        | OFF       |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+

在主库用sysbench进行压测

sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=10.x.x.201 --mysql-port=3306 --mysql-user=root --mysql-password='123456' --mysql-db=db_test --tables=10 --table_size=100000 --mysql_storage_engine=Innodb prepare
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=10.x.x.201 --mysql-port=3306 --mysql-user=root --mysql-password='123456' --mysql-db=db_test --tables=10 --table_size=100000 --mysql_storage_engine=Innodb --threads=8 --time=30000 --report-interval=10 --rand-type=uniform run

1.在所有数据库上执行SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;

mysql> SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
Query OK, 0 rows affected (0.08 sec)

等一会时间看看error日志是否有警告信息,如果没有警告信息继续下面步骤

2.在所有数据库实例上执行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;

mysql> SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%enforce_gtid%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| enforce_gtid_consistency | ON    |
+--------------------------+-------+
1 row in set (0.01 sec)

3.在所有数据库实例上执行SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

mysql> SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
Query OK, 0 rows affected (0.01 sec)

mysql> 
mysql> show variables like '%gtid_mode%';
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| gtid_mode     | OFF_PERMISSIVE |
+---------------+----------------+
1 row in set (0.01 sec)

设置为OFF_PERMISSIVE表示写新事物的gtid是匿名的,查看如下gtid未增加

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000007 | 20962982 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4.在所有数据库实例上执行SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;

mysql> SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
Query OK, 0 rows affected (0.02 sec)

mysql> show variables like '%gtid_mode%';
+---------------+---------------+
| Variable_name | Value         |
+---------------+---------------+
| gtid_mode     | ON_PERMISSIVE |
+---------------+---------------+
1 row in set (0.00 sec)

设置为ON_PERMISSIVE表示写新事物是gtid,查看如下gtid增加

mysql> show master status;
+------------------+----------+--------------+------------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |
+------------------+----------+--------------+------------------+---------------------------------------------+
| mysql-bin.000008 |  6968071 |              |                  | 33ab1a2d-cf38-11eb-9661-56c8a95977d1:1-5294 |
+------------------+----------+--------------+------------------+---------------------------------------------+
1 row in set (0.00 sec)

5.在每个数据库上ONGOING_ANONYMOUS_TRANSACTION_COUNT状态变量为0,状态变量变为0后再执行下一步

SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';

mysql> 
mysql> SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0     |
+-------------------------------------+-------+
1 row in set (0.01 sec)

6.等待所有匿名事务都复制完毕,在所有数据库实例上执行SET @@GLOBAL.GTID_MODE = ON;

mysql> SET @@GLOBAL.GTID_MODE = ON;
Query OK, 0 rows affected (0.04 sec)

mysql> show variables like '%gtid_mode%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode     | ON    |
+---------------+-------+
1 row in set (0.01 sec)

7.在所有mysql配置文件添加配置项

gtid_mode = on

enforce_gtid_consistency = on

8.现在复制拓扑所有事务都具有GTID,需要在每个从库上启用GTID的自动定位

stop slave;

CHANGE MASTER TO MASTER_AUTO_POSITION = 1;

START SLAVE;

mysql> stop slave ;
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> CHANGE MASTER TO MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> START SLAVE;
Query OK, 0 rows affected, 1 warning (0.01 sec)

from MySQL 8.0.22 可以使用
mysql> STOP REPLICA;
Query OK, 0 rows affected (0.01 sec)

mysql> CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION = 1 ;
Query OK, 0 rows affected (0.02 sec)

mysql> START REPLICA;
Query OK, 0 rows affected (0.01 sec)


mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.1.1.201
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000009
          Read_Master_Log_Pos: 196
               Relay_Log_File: ck1-relay-bin.000002
                Relay_Log_Pos: 371
        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: 196
              Relay_Log_Space: 578
              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: 2013306
                  Master_UUID: 33ab1a2d-cf38-11eb-9661-56c8a95977d1
             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: 
            Executed_Gtid_Set: 33ab1a2d-cf38-11eb-9661-56c8a95977d1:1-421256
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 0
            Network_Namespace: 
1 row in set, 1 warning (0.01 sec)

从结果中可以看到Auto_Position:1

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL传统点位复制在线转为GTID模式复制

    MySQL传统点位复制在5.7版本前是主要的主从复制模式,而随着MySQL5.6版本引入GTID,并且MySQL5.7进行各方面的优化以后,在mySQL...

    July
  • mysql复制系列3-传统复制和GTID复制

    在mysql5.6之前的版本支持传统的复制,即基于二进制文件和位置的复制。mysql5.6及其以后的版本支持基于GTID的复制,有了GTID复制不需要指定文件和...

    wangwei-dba
  • 【Mysql】5.7不停机:传统复制-gtid复制

    系统:centos7 主库:192.168.225.128:3307 从库1:192.168.225.129:3307 主从复制传统复制已配置完毕

    用户5522200
  • MySQL 传统复制与 GTID 复制原理及操作详解

    MySQL 复制在业界里有叫:mysql 同步,ab 复制等。专业名称就是叫:复制。

    数据和云
  • 【MySQL】Mysql5.7.21 传统复制切换到gtid复制遇到的一个现象

    系统:centos7 主库 M:192.168.16.12:3306 从库 S:192.168.16.15:3306 主从复制:传统复制

    用户5522200
  • MySQL5.7配置基于GTID的复制及GTID回退到传统模式的方法

    mysqldump -uroot -proot -q--single-transaction -A  > /root/all.sql

    二狗不要跑
  • MySQL复制全解析 Part 6 MySQL GTID 生命周期

    MySQL复制全解析 Part 2 一步步搭建基于二进制文件位置的MySQL复制

    bsbforever
  • 配置MySQL GTID 主从复制

    Leshami
  • MySQL的半同步是什么?

    年后在进行腾讯二面的时候,写完算法的后问的第一个问题就是,MySQL的半同步是什么?我当时直接懵了,我以为是问的MySQL的两阶段提交的问题呢?结果确认了一下后...

    纪莫
  • MYSQL数据同步之基于GTID事务数据同步

    本文通过Docker以及mysql5.7 镜像进行基于GTID数据复制的同步实践。

    公众号: 云原生生态圈
  • 【Mysql】mysql 基于GTID复制

    3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。

    用户5522200
  • MySQL5.5到5.7版本之间的迁移

    这两天在做MySQL方向上的版本升级和高可用改造,在这个过程当中,还是遇到了不少的问题。从资源问题到级连的复制关系,虽然没有肉眼可见的困难环节,但是小...

    AsiaYe
  • MySQL5.6和5.5的一些区别地方

    更详细的可以参考:http://www.tuicool.com/articles/rua2emE  和 《MySQL管理之道》

    二狗不要跑
  • Mysql GTID 模式详解 原

    3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。

    拓荒者
  • MySQL#复制 - crash-safe Replication - 下

    在单线程复制的情况下,5.7和5.6开关GTID的crash-safe其实可以简单理解为“没有差别”:

    用户1278550
  • 干货 | 携程异地多活-MySQL实时双向(多向)复制实践

    Roy,携程软件技术专家,负责MySQL双向同步DRC和数据库访问中间件DAL的开发演进,对分布式系统高可用设计、数据一致性领域感兴趣。

    携程技术
  • MySQL-主从架构探索

    http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.co...

    小小工匠
  • MySQL 8 复制(四)——GTID与复制

    版权声明:本文为博主原创文章,未经博主允许不得转载。 ...

    用户1148526
  • MySQL基于GTID主从复制的杂谈

    先来回顾一下MySQL的二进制知识点。基于Row格式的日志可以避免MySQL主从复制中出现的主从不一致问题。在一个sql语句修改了1000条数据的情况下,基于段...

    用户2032165

扫码关注云+社区

领取腾讯云代金券