mysql5.6传统模式怎么切换为gtid

mysql5.6传统模式怎么切换为gtid,第1张

1.目前的环境:

master 192.168.26.233 3306

slave 192.168.26.108 3306

复制:binlog+position 传统复制

2.在线切换

1.master和slave执行

root@localhost [zw3306]>set @@global.enforce_gtid_consistency = warn

Query OK, 0 rows affected (0.00 sec)

root@localhost [zw3306]>show global variables like '%enforce_gtid_consistency%'

+--------------------------+-------+

| Variable_name| Value |

+--------------------------+-------+

一、普通跳过一个事务的方法。

通过show slave status\G找到冲突的GTID号.

然后执行

SET gtid_next = '冲突的GTID号'

BEGINCOMMIT

SET gtid_next = 'AUTOMATIC'

START SLAVE

这就可以跳过一个事务了,原理在于通过执行一个空事务代替master传递过来的冲突事务.

二、通过备份的dump.sql文件搭建新的slave.

开启gtid以后,使用mysqldump备份,一般系统会要求你使用–all-databases参数,避免主库和从库有部分数据不一致。

备份以后,dump.sql里面会有这样一条语句.

SET @@GLOBAL.GTID_PURGED='0140505e-4230-11e4-b7c9-000c29da163d:1-8,dd079e18-4244-11e4-b851-000c29da163e:1-2'

这个就是当前主库已经执行过的GTID,也就是dump.sql里面的数据已经包含的GTID,对于这些GTID,slave是不用执行了,所以我们需要设置slave从这些

GTID以后开始复制.方法就是上面这条sql.

将dump.sql直接导入到slave以后.就可以直接change master了.

如果你是想通过这个方法跳过某个或者某些GTID,那么有点不同了.

set @@GLOBAL.GTID_PURGED是有要求的,也就是GTID_PURGED必须为空才可以设置,如何把GTID_PURGED清空呢.也就是需要执行

(root:hostname)[test]>show global variables like '%gtid%'

+--------------------------+-------------------------------------------------------------------------------------------------------------------------------+

| Variable_name| Value |

+--------------------------+-------------------------------------------------------------------------------------------------------------------------------+

| enforce_gtid_consistency | ON|

| gtid_executed| 0140505e-4230-11e4-b7c9-000c29da163d:1-25,

dd079e18-4244-11e4-b851-000c29da163e:1-2,


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7568873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存