mysql复制转换数据,MySQL的GTID复制与传统复制的相互转换

主库:192.168.225.128:3307

从库1:192.168.225.129:3307

主从复制传统复制已配置完毕

一、前提:

1.要求所有的mysql版本5.7.6或更高的版本。 2.目前拓扑结构中所有的mysql的gtid_mode的值为off状态。 3.如下的操作步骤都是有序的,不要跳跃着进行。

补充一下全局系统变量GTID_MODE变量值说明:

OFF       新事务是非GTID,  Slave只接受不带GTID的事务,传送来GTID的事务会报错 OFF_PERMISSIVE 新事务是非GTID,  Slave即接受不带GTID的事务也接受带GTID的事务 ON_PERMISSIVE    新事务是GTID,  Slave即接受不带GTID的事务也接受带GTID的事务 ON                   新事务是GTID,  Slave只接受带GTID的事务

需要注意的是,这几个值的改变是有顺序的,即

offOFF_PERMISSIVEON_PERMISSIVEON

不能跳跃执行,会报错。

二、传统复制切换为GTID复制

前提:测试步骤中S1默认都是打开log-bin选项的,

操作步骤

1. 在M、S实例上,将ENFORCE_GTID_CONSISTENCY设置为warning,哪台先执行不影响结果

M:mysql> set @@global.enforce_gtid_consistency=warn; S:mysql> set @@global.enforce_gtid_consistency=warn;

注意:执行完这条语句后,如果出现GTID不兼容的语句用法,在错误日志会记录相关信息,那么需要调整应该程序避免不兼容的写法,直到完全没有产生不兼容的语句,可以通过应该程序去排查所有的sql,也可以设置后观察错误日志一段时间,这一步非常重要。

2. 在M、S上,设置ENFORCE_GTID_CONSISTENCY为ON,哪台先执行不影响结果

M:mysql> set @@global.enforce_gtid_consistency=on; S:mysql> set @@global.enforce_gtid_consistency=on;

3. 在M、S实例上,设置GTID_MODE为off_permissiv;哪台先执行不影响结果

M:mysql> SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; S:mysql> SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

4. 在M、S实例上,设置GTID_MODE为on_permissiv;哪台先执行不影响结果

M: Mysql> SET @@GLOBAL.GTID_MODE = on_permissive; S: Mysql> SET @@GLOBAL.GTID_MODE = on_permissive;

5. 在M、S上检查变量ONGOING_ANONYMOUS_TRANSACTION_COUNT,需要等到此变量为0

Mysql>SHOW STATUS LIKE ‘ONGOING_ANONYMOUS_TRANSACTION_COUNT‘; Mysql>SHOW STATUS LIKE ‘ONGOING_ANONYMOUS_TRANSACTION_COUNT‘;

6. 确保所有的匿名事务(非GTID事务)已经被完全复制到所有的server上。

M:show master status; S:show slave status\G 或者或者slave直接用函数: SELECT MASTER_POS_WAIT(‘mysql-binlog.000005‘,154);

返回结果大于等于0就说明匿名事务已经全部复制完成

7. 确认整个拓扑结构中已经没有匿名事务的存在,

如之前产生的所有匿名事务已经全部被执行完毕,甚至二进制日志中也不要有匿名事务,可以通过flush logs,并让mysql来自动清理旧的二进制日志文件。

8. 在每个mysql实例上,设置GTID_MODE为on

M: mysql> SET @@GLOBAL.GTID_MODE = ON; S: mysql> SET @@GLOBAL.GTID_MODE = ON;

9. 在每个mysql实例的配置文件my.cnf上,

增加

gtid-mode=ON enforce_gtid_consistency=on

10. 完成

2.9 change master

[email protected] [(none)] 11:37:17>STOP slave;

Query OK, 0 rows affected (0.00 sec)

[email protected] [(none)] 11:37:24>change master to master_auto_position=1;

Query OK, 0 rows affected (0.00 sec)

[email protected] [(none)] 11:37:52>start slave;

Query OK, 0 rows affected (0.00 sec)

---------------------

my.cnf 配置:

log_bin = mysql-bin

bin_log= /usr/local/mysql/log/mysql-bin

binlog_format= ROW       //建议row

log-slave-updates=true      //在从服务器进入主服务器传入过来的修改日志所使用,在Mysql5.7之前主从架构上使用gtid模式的话,必须使用此选项,在Mysql5.7取消了,会增加系统负载。

enforce-gtid-consistency=true //强制gtid一直性,用于保证启动gitd后事务的安全;

gtid-mode=on //开启gtid模式

master_info_repository=TABLE

relay_log_info_repository=TABLE //指定中继日志的存储方式,默认是文件,这样配置是使用了 两个表,是INNODB存储引擎,好处是当出现数据库崩溃时,利用INNODE事务引擎的特点,对这两个表进行恢复,以保证从服务器可以从正确位置恢复数据。

sync-master-info=1      //同步master_info,任何事物提交以后都必须要把事务提交以后的二进制日志事件的位置对应的文件名称,记录到master_info中,下次启动自动读取,保证数据无丢失

slave-parallel-workers=2      //设定从服务器的启动线程数,0表示不启动

binlog-checksum=CRC32 //主服务端在启动的时候要不要校验bin-log本身的校验码

master-verify-checksum=1 //都是在服务器出现故障情况下,读取对服务器有用的数据

slave-sql-verify-checksum=1binlog-rows-query-log_events=1 //启用后,可用于在二进制日志记录事件相关信息,可降低故障排除复杂度(并非强制启动)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值