mysql gtidpurged_MySQL设置gtid_purged破坏AUTO_POSITION复制协议

在MySQL 5.6.22中,如果在主库上设置GTID_PURGED包含备库未复制的事务,会导致备库在连接时丢失事务,主备不一致。此问题源于主库不会因找不到匹配的binlog而报错,而是继续发送binlog。修复方案是在查找binlog前检查gtid_purged是否大于slave_gtid_executed,若大于则报错。
摘要由CSDN通过智能技术生成

BUG描述

MySQL 5.6.22中有这样一个关于GTID的bugfix,在主备场景下,如果我们在主库上 SET GLOBAL GTID_PURGED = “some_gtid_set”,并且 some_gtid_set 中包含了备库还没复制的事务,这个时候如果备库接上主库的话,预期结果是主库返回错误,IO线程挂掉的,但是实际上,在这种场景下主库并不报错,只是默默的把自己 binlog 中包含的gtid事务发给备库。这个bug的造成的结果是看起来复制正常,没有错误,但实际上备库已经丢事务了,主备很可能就不一致了。

背景知识

binlog GTID事件

binlog中记录的和GTID相关的事件主要有2种,Previous_gtids_log_event 和 Gtid_log_event,前者表示之前的binlog中包含的gtid的集合,后者就是一个gtid,对应一个事务。一个 binlog 文件中只有一个 Previous_gtids_log_event,放在开头,有多个 Gtid_log_event,如下面所示

Previous_gtids_log_event // 此 binlog 之前的所有binlog文件包含的gtid集合

Gtid_log_event // 单个gtid event

Transaction

Gtid_log_event

Transaction

.

.

.

Gtid_log_event

Transaction

1

2

3

4

5

6

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值