故障案例:高可用切换后数据不一致,旧主库数据丢失

在进行高可用切换后,发现数据出现不一致,旧主库的数据丢失。文章详细分析了故障的原因,并提供了相应的解决策略。
摘要由CSDN通过智能技术生成

故障现象:

有台物理机宕机,复制架构是master-master+半同步,期间触发了高可用容灾切换,后台显示成功切换到了备库。但是等旧主库起来后,主从状态正常,但是旧主库上却丢失了一部分数据,通过对比发现这些数据都是在宕机瞬间的写操作

原因分析:

1 假设旧主库A丢失的数据记录为X,我们去A上解析发现宕机那段时间并无X记录的binlog信息,可确定在宕机瞬间该记录X没有binlog落盘;
2 因为我们开了log_slave_updates,我们去新主库B上解析那段时间的binlog,发现存在binlog记录,并且server-id是A的,可确定这个X记录是旧主库A传给新主库B的,而不是B自己产生的
3 初步猜测,宕机瞬间旧主库A部分binlog没有落盘,但是却已经传到了新主库B,等旧主库通过redo异常恢复时,因为binlog中无X记录的操作,则直接回滚了该操作,导致A上无X记录,而X记录已经存在备库B的binlog中并成功执行,导致双主两边数据不一致
3 那么主要需要排查的就是:为什么主库binlog没有落盘的情况下,能否直接传给从库?
4 通过查看参数设置,发现A上将sync_binlog设置为0,即binlog落盘时间完全由操作系统决定,而不是每次操作都会将binlog落盘,这样旧主库A在宕机时就可能丢失部分binlog;
MYSQL_BIN_LOG::sync_binlog_file(bool force)
{
  bool synced= false;
  unsigned int sync_period= get_sync_p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值