GTID工具联动:http://blog.itpub.net/29510932/viewspace-1736132/

-------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------------

场景:

MySQL-5.7.12, 开启GTID, M1和M2双主同步, S1从库, RC隔离级别

背景:

因为网络波动导致S1的Master从M1切换到了M2, 切换过去以后同步失败, 报错信息如下:

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, butthe master has purged binary logs containing GTIDs that the slave requires.'

分析:

从报错信息上很明显能看出是M2主库purge掉了S1从库还没有receive的事务, 所以报错了;

着手处理:不过印象中这个业务库本身应该是没什么业务流量的, 不至于需要purge掉binlog;

遂登录主库M2看一下:

binlog日志都在.......

那么就很奇怪了....M2的binlog没有purge过, 为什么会报这个ER_MASTER_HAS_PURGED_REQUIRED_GTIDS的错误呢?

考虑到时间紧迫, 临时用log_file和position的方式恢复了M2与S1的同步;

确认没有再出现问题以后, google+翻了一下源代码;

根据关键字ER_MASTER_HAS_PURGED_REQUIRED_GTIDS找到~/mysql/sql/rpl_binlog_sender.cc的第744行,

点击(此处)折叠或打开

if (!gtid_state->get_lost_gtids()->is_subset(m_exclude_gtid))

{

errmsg=ER(ER_MASTER_HAS_PURGED_REQUIRED_GTIDS);

global_sid_lock->unlock();

set_fatal_error(errmsg);

return 1;

}

结合一部分注释, 以及代码上下文的内容, 可以知道M2在初始化dump线程的时候, 会检查S1的一些GTID相关的状态,

这段代码会检查从库是否能"继续"从主库同步事务;

判断的条件可以简单描述为:主库不能purge掉从库还没有execute的事务(或者是主库压根就没有那一部分日志);

一直到这里, 都证明了最初的判断是没问题的, 那为什么M2的binlog全部都在, 但是S1又报这个错误了?

登录M2, 看一下GTID_Purged的信息,

居然还真的有purged的信息, 不过这个UUID并不是M2的, 而是M1的;

在replication中, 会有这么一种现象:通过replication获得的事务,在SQL thread复现完以后, 会自动purge掉;

所以在M2上面, 就出现了M1的GTID被purge的信息;

由于M1和M2并没有开启slave-log-update, 所以S1在以M2为主库的时候,无法获取到M1的事务,

而切换的过程中, S1断开了与M1的连接,在建立起与M2的连接前, M2复现了一些M1的事务, 并Purge掉了;

当S1的master切换到M2以后, 在dump前, 会检查到M2上9cfe6b63-3e90-11e6-a1db-525400e9a4af:1-66177的事务都全部purge掉了,

所以S1连接到M2之后,发现S1的executed_gtid中,9cfe6b63-3e90-11e6-a1db-525400e9a4af的事务低于66177(凭记忆, 报错的时候是33000多,估计是因为网络的波动的原因, 同步中断了有一阵子了), 所以报出了之前的错误:master has purged binary logs;

之后在测试环境搭建了一套测试环境, 在Master的GTID_Purged超过Slave的Executd_GTID时, 必定会报出这个错误,不论这个GTID的UUID是不是Master自己的;

总结:所以在这个案例中,最合适的做法是在S1上面Purge掉主库已经Purged的事务, 然后再使用auto_position=1的方式进行同步;

以后再遇到类似的问题, 也可以遵循一个基本的原则来判断是需要purge, 还是跳过:

从库在开始同步前,主库会依靠GTID来确认从库在开始同步以后, 能够把每一个主库上执行过的事务(包括slave的SQL Thread)都复现一次,最终保持和主库完全一致;

判断方法也很简单,基本基于两个条件:

1.主库不能purge从库还没有execute的事务(即从库的executed_GTID要大于主库的GTID_Purged);

2.主库上的事务号不能低于从库(即从库的executed_GTID的最后一个事务要在主库的executed_GTID的范围之内);

PS: 在这个案例中, 由于从库已经获取不到从33000多到66177的事务了(主库GTID_Purged中的记录), 所以不符合条件1终止同步过程, 并报错;

mysql gitd 数据结构同步失败_MySQL案例-GTID同步失败:master has purged binary logs相关推荐

  1. mysql gtid 1236_MYSQL主从搭建GTID报错 error 1236 master has purged binary logs containing GTIDs?...

    主从的版本:5.7.25-28-log 现状: 将主库的全备(innobackupex)还原作为一个从库,还原的过程正常,在设置从库报错: Got fatal error 1236 from mast ...

  2. mysql 主主同步失败_MySQL 主主复制失败问题

    今天遇到 MySQL 主主同步复制失败的问题,记录下解决办法 注意下文中 MySQL 版本比较老,现在新版版本支持了很多新的特性.笔者用的 MySQL 版本是 5.7. 问题描述: DB1 和 DB2 ...

  3. mysql配置读写分离无效_MySQL数据库的同步配置+MySql 读写分离

    MySQL数据库的同步. MySQL是开源的关系型数据库系统.主从同步复制(Replication)是从一台MySQL数据库服务器(主服务器master)复制数据到另一个服务器(从服务器slave)的 ...

  4. mysql 同步更新_MySQL slave 不能同步更新

    MySQL slave 不能同步更新 mysql slave server 上进程停止   重启后 不接收 master上的更新 mysql>show slave status\G; ***** ...

  5. mysql双向同步读写_mysql数据双向同步

    即读写操作在两台服务器上进行,每台服务器即主也是从.当其中的任何一台服务器收到操作请求时,其进行相应的数据变化,并把变化的数据复制到另一台服务器中. 4 数据同步实现 4.1mysql数据双向同步 4 ...

  6. mysql reset master 和 purge binary logs 的区别

    删除不同 reset master 会删除所有的二进制日志 mysql> help reset master; Name: 'RESET MASTER' Description: Syntax: ...

  7. mysql gitd 数据结构同步失败_Mysql5.7版本Gtid复制出现不同步的情况

    Mysql5.7版本,Gtid复制出现不同步的情况: 问题:由于shell检测Mysql从库状态 : Slave_IO_Running: Yes Slave_SQL_Running: Yes 一直都为 ...

  8. mysql 主主同步失败_Mysql主主同步失败后的恢复

    基础信息 主库: 数据库2 10.126.4.2 数据库3 10.126.4.3 1. 停止数据库3对外服务 防止同步过程中服务通过数据库3写入数据 $ firewall-cmd --remove-p ...

  9. mysql主主同步冲突_MySQL主主同步主键冲突处理

    两台数据库都报slave同步失败了,先说明一下环境,架构:lvs+keepalived+amoeba+mysql,主主复制,单台写入, 主1:192.168.0.223(写) 主2:192.168.0 ...

  10. mysql 主主模式优缺点_mysql主主同步模式

    主192.168.56.20 和 从都新建数据库db1 db2 db3(如果数据库在用,需要上锁后手动从主备份,然后在从恢复) mysql> create database db1; Query ...

最新文章

  1. python编程图_Python编程图形库之Pillow使用方法讲解
  2. XAF 官方问题笔记
  3. 内网渗透-2019/06/06
  4. 色诱社报道:昨日,腾讯公司公布了2009年发展策划
  5. ITK:对图像中的结构进行分割
  6. 深度学习-Tensorflow2.2-Eager模式与自定义训练{4}-微分运算训练练习-16
  7. java getparameter 乱码_request.getParameter(“参数名”) 中文乱码解决方法
  8. 计算机制图的平行投影,工程制图与计算机辅助设计课件-20210406204806.ppt-原创力文档...
  9. Vue H5 History 部署IIS上404问题
  10. 将分类图像转换为ERDAS可识别的专题图像(Continuous to Thematic)
  11. 从苹果2015年春季发布会看移动互联网的发展
  12. 问题 B: 结构体---职工信息结构体
  13. 浅谈语音助手的对话管理与策略制定
  14. 支持向量机中高斯核函数的直观理解
  15. PIC 1508 DAC使用
  16. BFC、IFC、GFC、FFC
  17. 2015MCM/ICM总结
  18. 七种促进睡眠的好方法,让你改善睡眠质量
  19. 基于区块链的防护物资捐赠监管系统(三):功能设计
  20. 默蓝网络通信TCP/HTTP测试工具介绍

热门文章

  1. 陪玩行业怎么找客户?想做线上引流?这篇文章打开你的思路!
  2. 干货 | 人工智能应用落地的关键成功要素
  3. 基于Vue3在线商城(Vue3+VueCLI+VueRouter+vuex+axios+Bootstrap)
  4. 2017年总结和2018年计划
  5. ppt文件太大怎么压缩变小?
  6. 第6章 项目进度管理
  7. 使用POI编译word—删除WORD空白段落
  8. 计算机桌面不同步,电脑时间不同步怎么回事 电脑时间不能自动更新如何修复...
  9. html flag属性,纯CSS实现文章左上角Flag标签
  10. Python使用requests设置headers、cookies实现猫眼实时电影票房排行榜爬取