事件背景
客户反馈在晚间数据跑批后,查询相关表的数据时,发现该表的部分数据在数据库中不存在,从应用跑批的日志来看,跑批未报错,且可查到日志中明确显示当时那批数据已插入到数据库中,需要帮忙分析这批数据丢失的原因...备注:考虑信息敏感性,以下分析场景测试环境模拟,相关数据做以下说明
涉及的库表为demo.t_dba_info表
丢失的数据为insert into t_dba_info(name,age) values...确认该条数据丢失的时间区间并解析binlog
这里我为模拟环境,直接在主库解析,生产环境建议都在从库解析避免对主库造成影响
BINLOG_LIST='mysql-bin.000002 mysql-bin...次truncate操作,等等,好像发现了什么,那条丢失的数据也是在这个mysql-bin.000004文件中,梳理下逻辑,难道那条记录在2次truncate之间,于是单独对这个binlog做详细解析,得到以下信息...,与客户确认跑批灌数据的逻辑,了解到会对该表做truncate,但由于误操作,在跑批开始后,又触发了一轮truncate行为,导致已经插入到该表的部分数据再次被清理了,也就导致了在解析binlog时部分记录丢失了