mysql gtid复制

gtid组成GTID = source_id:transaction_id
全局唯一,使用gtid就不用指定log和pos,简化了配置主从的步骤,方便了failover,master slave都保存gtid的信息,相同的gtid在从库上不会被重复执行。gtid的生命周期:
事务在master上执行并被提交,分配一个gtid,写入二进制日志中
在二进制日志被传送到从库并存放在relay日志中后,slave读取gtid设置gtid_next,告诉下一个执行的事务是哪个。
从库检查gtid是否被使用过,没有被使用过,那么就写gtid到二进制日志中,应用事务。
在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行
配置gtid的复制,mysql至少使用下面的参数启动,开启binlog记录执行过的gtid,建议设置skip_slave_start=1
mysqld_safe –gtid_mode=ON –log-bin –log-slave-updates –enforce-gtid-consistency &
配置从库指向主库开始复制,master_auto_position来告诉slave,事务将会使用gtid来标记。
mysql> CHANGE MASTER TO

MASTER_HOST = host,
MASTER_PORT = port,
MASTER_USER = user,
MASTER_PASSWORD = password,
MASTER_AUTO_POSITION = 1;

对于gtid模式的复制,遇到错误的时候,如果想要跳过一些错误,需要使用gtid_purged
1在SHOW SLAVE STATUS\G查看读取的及执行的事务信息
2stop slave;
3reset master
4SET @@GLOBAL.GTID_PURGED = “3a16ef7a-75f5-11e4-8960-deadeb54b599:1-283,f2b6c829-9c87-11e4-84e8-deadeb54b599:1-32”;
5start salve
上面的是跳过32这个事务,此处的跳过事务,不会跳过别的sql?这样数据不就不一致了?

gtid的一些限制:
使用不同的存储引擎会出现问题。
create table …select的语句不被gtid支持
对于临时表,当使用gtid的时候,如果create temporary table 和drop temporary table在事务中的时候是不被支持的,这2个语句可以在事务之外,autocommit=1的情况中。
为了阻止导致gtid复制失败的语句的执行,设置enforce-gtid-consistency选项。这个选项会导致不被gtid支持的语句执行失败。
gtid和mysqldump,可以将mysqldump的备份导入到gtid模式的server中,确保目标server中的二进制日志中没有gtid。

在gtid模式下转换回传统模式:
1、关闭SLAVE;
2、手工CHANGE BINLOG FILE & POS,指向MASTER上最新产生的BINLOG FILE & POS,并且设置 MASTER_AUTO_POSITION = 0;
3、启动SLAVE;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值