启用auto_position=1一直报的错


启用auto_position=1一直报错了致命错误1236从二进制日志读取数据时从主:& # 39;奴隶是连接使用修改主MASTER_AUTO_POSITION=1,但主清除二进制日志包含GTIDs奴隶需要# 39;公司,Error_code: 1236


gtid中一些变量的理解

Retrieved_Gtid_Set:接收到gtid集合

Executed_Gtid_Set:奴隶已经执行过gtid集合,这个值使用从库的gtid_executed这个变量初始化

gtid_executed:执行过的gtid集合

gtid_purged:已经被清洗清除掉gtid集合



在执行开始slave 的时候,如何计算起始的gtid值/集合

在从库已经执行的gtid集合

gtid_executed={0 dd527e9 af3e - 11 - e8 9 ed6 - 00505683 - b926:1 - 62 0 dd527e9 af3e - 11 - e8 9 ed6 - 00505683 - b927:1 - 3, 87 cf7b97 - c393 11 - e8 - 845 b - 005056 a95814:1 bb014309 e1a6 - 11 - e8 b284 - 00505683 - b926:1 - 12, c488995b e256 - 11 - e8 abb7 - 00505683 - b926:1 - 9}


主库上执行的gtid集合

master_gtid_executed={c488995b e256 - 11 - e8 abb7 - 00505683 - b926:1 - 10}


主库发送给从库的第一个gtid值(也可能是一个集合)

send_first_gtids={master_gtid_executed - gtid_executed}

send_first_gtids={c488995b e256 - 11 - e8 abb7 - 00505683 - b926:10}



这个时候就计算出主人需要发送给奴隶的第一个gtid值/集合,

如果这个值已经被主人清洗清理掉了(也就说在主人的binlog文件中找不到了)

奴隶就会报错,1236错误,

具体报错如下:

有致命错误1236从二进制日志读取数据时从主:& # 39;奴隶是连接使用修改主MASTER_AUTO_POSITION=1,但主清除二进制日志包含GTIDs奴隶需要# 39;公司,Error_code: 1236


对于这种错误有两种解决方案,

1。重做奴隶

2。找到历史的binlog文件,收到从binlog文件cp出需要的gtid集合日志在奴隶执行(这里需用到mysqlbinlog——include-gtids),重新初始化从库的gtid_executed的值


启用auto_position=1一直报的错