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,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)