1)背景:
最近帮业务方排查了两例主主复制丢数据或者主键冲突的问题,DB侧的同事也问我这是什么一个原理,在解答他们的同时,顺便也把这个问题记录一下2)现象: 公司一南北业务采用主主复制,而且该表的主键是自增ID,每个主库的自增ID是错开的,但是业务的主键却出现了主键冲突,开始以为是设置不当,或者认为修改造成,但是翻看历史记录,没人有过操作,而且配置也正确,没人重启;在调查binlog中,发现了一个有意思的现象,MySQL的一个主库binlog中出现了两条主键ID是一样的binlog,而且是insert产生的binlog,具体现象如下:17:19分一条
17:22分钟的一条
开始自己的感觉是懵逼的,怎么主键相同,还能插入同一张表?后面猛然一想,这应该是gh-ost改表结构造成的(本公司DBA严重不足,部分DB操作只能让业务运维也承担一部分了)3)模拟分析:
前提:假设有两个双主,分别叫主库A与主库B,上面存在表T,T表只有一个主键,在ghost修改之前的表,我们叫T,修改之后的表是T'(T跟T'其实是同一张表,只是产生的时间不同的叫法,方便表示)
①主库B进行rename table T to T_old,new_t TO T操作,这时候主库A是T'表了
②同时主库A插入T表13的数据,但是主库B还没收到(延迟关系)
③主库A的T表被主库B传过来的rename table T to T_old,new_t TO T修改,变成了T';由于T'表在主库B还没收到第二步发过来的13,所以主库A的T'表肯定也没13这个值
④主库A在这时又向T'插入13,正在复制给主库B的T'中(由于延迟,还没发送到主库的T'表)
⑤主库B的T'接收到第二步主库A插入T的13
⑥第四步主库A写入T'的13已经传到主库B,发现B主库的T'表已经有了13(第五步过来的),然后主键冲突到此,主键冲突的原因已经找到,这种冲突意味着数据有丢失(此分析需要你对gh-ost的原理有充分的理解)4)如何避免 在用gh-ost修改表结构的工程中,如果是双主都有写入,则必须将写入切到单边,然后再进行修改
【MySQL】gh-ost改双主表结构主键冲突问题
来源:这里教程网
时间:2026-03-01 14:57:20
作者:
编辑推荐:
- 【MySQL】gh-ost改双主表结构主键冲突问题03-01
- MySQL 5.7 基于GTID搭建主从复制03-01
- Mysql Sleep线程引发的锁等待故障03-01
- 玩转processlist,高效追溯MySQL活跃连接数飙升根因03-01
- MySQL8.0.18数据库新增数据文件03-01
- 为什么你精通CRUD,却搞不懂数据库的基本原理?03-01
- 【MySQL】MHA源代码之主库选取(二)03-01
- MySQL数据库基本知识03-01
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 【MySQL】gh-ost改双主表结构主键冲突问题
【MySQL】gh-ost改双主表结构主键冲突问题
26-03-01 - Mysql Sleep线程引发的锁等待故障
Mysql Sleep线程引发的锁等待故障
26-03-01 - 玩转processlist,高效追溯MySQL活跃连接数飙升根因
玩转processlist,高效追溯MySQL活跃连接数飙升根因
26-03-01 - 为什么你精通CRUD,却搞不懂数据库的基本原理?
为什么你精通CRUD,却搞不懂数据库的基本原理?
26-03-01 - MySQL数据库基本知识
MySQL数据库基本知识
26-03-01 - 37女神节女王节PPT模板分享,送给需要的你!
37女神节女王节PPT模板分享,送给需要的你!
26-03-01 - Mysql数据库delete删除后数据恢复报告
Mysql数据库delete删除后数据恢复报告
26-03-01 - 三范式
三范式
26-03-01 - 2019香港动作片《叶问4:完结篇》高清1080P/720P免费下载
2019香港动作片《叶问4:完结篇》高清1080P/720P免费下载
26-03-01 - MySQL:理解MDL Lock
MySQL:理解MDL Lock
26-03-01
