网易首页 > 网易号 > 正文 申请入驻

gh-ost 翻车!使用后导致数据丢失!

0
分享至

相信对于很多 DBA 同学来说,由 Github 网站开源的在线 DDL 工具 gh-ost ,相信不会陌生。

对比另一款在线 DDL 工具 pt-osc,gh-ost 的开销更小。gh-ost 通过二进制日志(binlog)记录 DDL 变更过程中的修改,而 pt-osc 通过触发器记录修改变化。

显然,触发器开销更大,且 5.7 版本之前一张表只能有一个类型的触发器,因此使用 pt-osc 的限制也更多些。

因此,使用工具 gh-ost 来进行在线表结构变更操作几乎可以认为是目前 MySQL 的一种标准变更规范。

然而,gh-ost 翻车了!在我们的生产环境中,使用 gh-ost 进行表结构变更后,导致了1条数据的丢失!

在金融业务中,数据丢失是绝对不容许发生的场景

我们的工程师同学经过周末连番的源码研究与测试,最终定位这的确是 gh-ost 代码 bug。

这意味着之前所有通过 gh-ost 进行 MySQL 数据库变更的操作,都有可能触发数据丢失。

复盘

接着,我给同学们复盘下使用 gh-ost 导致数据丢失的原因。

gh-ost 的基本实现原理如下图所示,具体实现不在本文章赘述,感兴趣的可移步官网:https://github.com/github/gh-ost

从源码实现的角度看,gh-ost 经历以下几个关键函数步骤:

1. addDMLEventsListener:添加对于二进制日志的过滤采集(指定表的二进制日志过滤)

2. ReadMigrationRangeValues:获取对应表唯一索引的max、min值

3. onBeforeRowCopy:将捕获的二进制日志应用到表 *_gho

4. iterateChunks:根据 min、max 值,批量插入数据到表 *_gho

5. rename & drop 新旧表

但是,存在一种可能性,addDMLEventListner后,对应的二进制日志“丢失”了!

这种情况发生的原因可能是因为 MySQL 数据库启用了 after_sync 模式的半同步复制(二阶段提交)。

怎么理解呢?可以通过下面的时序图来看:

从上图可以看到,在某些场景下,可能发生 gh-ost 开始捕获 DML 操作后的二进制日志,但是之前的二进制事务并没有提交!

在上图的案例中,步骤1 addDMLEventsListener 将会捕获记录5以后发生的日志。

然而,在步骤2 ReadMigrationRangeValues 中,获取 min、max的值将会是1、4。

这是因为由于 after_sync 半同步模式,记录5对应的事务还未提交(如网络原因,或从机宕机等场景),记录5对于 gh-ost 中的函数 ReadMigrationRangeValues 是不可见的。

因此,步骤3、4只会插入记录1-4,以及回放记录5之后的所有日志,但会丢失记录5。

既然知道了原因,那么修复就变得非常简单了。只需要在获取 min、max的边界值的时候通过一致性读取即可

SELECT MIN(UK),MAX(UK) FROM xxxLOCK IN SHARE MODE;

通过 LOCK IN SHARE MODE,即便发生上述 after_sync 半同步等待问题,则在函数 ReadMigrationRangeValues 执行过程中,需要等待上述事务提交才能完成边界值的获取。

这时,边界值就会变为1、5,从而不会导致数据的丢失。

总结

从上述复盘看,gh-ost 数据丢失的可能性是比较大的,而且并不只是一条记录的丢失。

理论上可以是最后一组提交事务的数量,且每个事务可能影响的记录也不止一条。

反观工具 pt-osc,其通过触发器捕获增量日志,因此不存在该问题。

另一方面,从这个案例中可以看到一致性共享读取的使用场景。

FOR UPDATE 的一致性排他读取大家都了解,但 LOCK IN SHARE MODE 何时使用呢?这个场景给了你很好的答案。

最后,在金融场景不能仅仅相信数据库的一致性检查。

在上述场景下,主从数据核对检查依然是一致的,没有数据丢失。

所以,金融场景一定还要有业务层的数据核对,通过逻辑核对,确保数据库中的数据是没有任何物理丢失。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
湖人若炒掉哈姆,5大主帅可供詹姆斯挑,从快船挖泰伦卢最被看好

湖人若炒掉哈姆,5大主帅可供詹姆斯挑,从快船挖泰伦卢最被看好

好火子
2024-05-01 04:29:01
党中央决定:程福波履新

党中央决定:程福波履新

蓝色海边
2024-04-30 18:30:07
海外谈中国:“福建”号航母将开始第一次海试 作战能力显著提升

海外谈中国:“福建”号航母将开始第一次海试 作战能力显著提升

hawk26讲武堂
2024-04-30 15:01:49
卢麒元是谁?为什么宣布退网

卢麒元是谁?为什么宣布退网

匹夫来搞笑
2024-05-01 00:08:34
千亿订单直接取消!我国正式下达“逐客令”:一颗螺丝钉也不要了

千亿订单直接取消!我国正式下达“逐客令”:一颗螺丝钉也不要了

小蜜情感说
2024-04-30 23:42:01
虾仁猪心!美媒:雷霆横扫对手且有16个首轮签 太阳被横扫但0首轮

虾仁猪心!美媒:雷霆横扫对手且有16个首轮签 太阳被横扫但0首轮

直播吧
2024-04-30 11:24:40
欧冠-拜仁2-2皇马伯纳乌再战 金玟哉漏人致丢球+送点维尼修斯双响

欧冠-拜仁2-2皇马伯纳乌再战 金玟哉漏人致丢球+送点维尼修斯双响

直播吧
2024-05-01 05:00:30
女人在过夫妻性生活时,为什么总发出声音?医生:大多数人不了解

女人在过夫妻性生活时,为什么总发出声音?医生:大多数人不了解

皮皮讲文
2024-01-02 10:36:17
今年“五一”不一般,60年难遇,记住:3不吃,3不做,安稳过假期

今年“五一”不一般,60年难遇,记住:3不吃,3不做,安稳过假期

小谈食刻美食
2024-04-30 16:17:55
湖人掘金G5裁判报告:仅一次漏判湖人获利 漏吹里夫斯对戈登犯规

湖人掘金G5裁判报告:仅一次漏判湖人获利 漏吹里夫斯对戈登犯规

罗说NBA
2024-05-01 04:59:03
周鸿祎迈巴赫买家退出二手车公司

周鸿祎迈巴赫买家退出二手车公司

鞭牛士
2024-04-30 16:23:20
1976年,我受伤退伍被未婚妻当面退亲,一年后我痊愈她后悔不已

1976年,我受伤退伍被未婚妻当面退亲,一年后我痊愈她后悔不已

微微的风
2024-04-25 18:46:04
丈夫凭“鼻子”嗅出真相!妻子去昆明旅游,裙上竟被射上不明液体

丈夫凭“鼻子”嗅出真相!妻子去昆明旅游,裙上竟被射上不明液体

娱乐小可爱蛙
2024-04-30 23:28:07
闹大了!东航客机应急滑梯被放出 疑因机组矛盾 涉事人身份被扒!

闹大了!东航客机应急滑梯被放出 疑因机组矛盾 涉事人身份被扒!

钱多多多多
2024-04-30 17:38:22
一夜被嘲3万次,韩雪“装腔”又失败,这次她提爷爷也不好使了!

一夜被嘲3万次,韩雪“装腔”又失败,这次她提爷爷也不好使了!

怪兽瞎蹦跶
2024-04-22 17:59:37
广东中山“最美院长”被逮捕:安全套成箱买,私生活糜烂以身上位

广东中山“最美院长”被逮捕:安全套成箱买,私生活糜烂以身上位

天闻地知
2024-04-30 10:04:18
⚡️雷霆创多个历史最年轻纪录未来7年13个首轮+19个次轮

⚡️雷霆创多个历史最年轻纪录未来7年13个首轮+19个次轮

直播吧
2024-04-30 16:34:11
“我孩子没做错”,9+9÷3等于12被打红叉,家长质问老师反被打脸

“我孩子没做错”,9+9÷3等于12被打红叉,家长质问老师反被打脸

红丽说教育
2024-04-28 10:51:17
67军军长李湘战场离奇死亡!彭德怀:坏了,莫非是?当即隐瞒死因

67军军长李湘战场离奇死亡!彭德怀:坏了,莫非是?当即隐瞒死因

丛丛岁月
2024-01-19 22:27:47
贾玲的42岁生日,让人看到了娱乐圈的“人情世故”

贾玲的42岁生日,让人看到了娱乐圈的“人情世故”

不八卦会死星人
2024-04-29 18:08:07
2024-05-01 05:22:44
破产码农
破产码农
IT圈最会讲故事的码农
161文章数 7039关注度
往期回顾 全部

科技要闻

余承东卸任华为终端CEO 新任命为董事长

头条要闻

媒体:余承东将卸任华为终端BG CEO

头条要闻

媒体:余承东将卸任华为终端BG CEO

体育要闻

两星闪耀二十冠徐州国米球迷会包下大荧幕,庆祝国米意甲20冠

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

查道炯:中国经济的外部挑战与应对思考

汽车要闻

越野老炮最爱 哈弗新H9新增2.4T柴油机

态度原创

数码
手机
亲子
本地
公开课

数码要闻

基于Arm的联想ThinkPad X13s笔记本将得到Ubuntu官方的持续支持

手机要闻

再次有传言称 iPhone 16 将采用彩色背板玻璃

亲子要闻

这孩子情商真的很高!男孩得知同桌没有铅笔 和老师“谋划”高情商送铅笔!

本地新闻

食味印象 | 潍坊:碳水脑袋的人间乐园

公开课

父亲年龄越大孩子越不聪明?

无障碍浏览 进入关怀版