宕机引发的mysql复制中断

分享一个宕机引发的mysql复制线程中断

铃铃~
喂? 郭** AWS机器底层故障导致数据库服务器重启,你起来帮忙启动一下服务。

这已经是深夜的第二个告警电话了,困得一比,不过还好,这次就简单的起下服务,应该马上就好了,于是我迅速打开电脑,连上VPN,就在此时开始了我的不眠夜。

找到出重启机器,mysqld_safe 启动服务 ,查看复制线程,咦?怎么SQL线程出错了,错误相关信息如下:
Worker 1 failed executing transaction ‘f878dbe4-db73-11ea-bec8-000c29888b5f:833’ at master log mysqlbin.000001, end_log_pos 247623; Could not execute Write_rows event on table ttt.user; Duplicate entry ‘830’ for key ‘PRIMARY’, Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event’s master log FIRST, end_log_pos 247623’

线上一级系统 后续没敢自己操作 拨通了资深DBA的电话,5分钟后,告警消失,SQL线程恢复正常。

第二天上班,请教资深DBA,SQL线程报错的原因,回复很简洁:刷盘参数非双1,binlog未落盘

于是带着自己的疑问去复现这个问题

环境:一主一从、5.7.23版本 操作系统:centos7

主库使用脚本不间断写入

从库刷盘参数改成02
sync_binlog=0 //表示binlog的刷盘由操作系统决定,性能最好
innodb_flush_log_at_trx_commit=2 //事物提交写到操作系统缓存但不调用sync不写入磁盘

写入过程中,强制关闭从库虚机,重启后,果然SQL线程出错
Last_SQL_Errno: 1062
Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ‘f878dbe4-db73-11ea-bec8-000c29888b5f:833’ at master log mysqlbin.000001, end_log_pos 247623. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

改成双1后,未出现SQL线程问题

分析下这个问题的原因:
binlog刷盘参数等于0,在宕机过程中,存在binlog未持久化到磁盘,当后面复制线程启动后,会去最新的binlog文件,最新的位点去读取当时的GTID信息建立复制,但在宕机时内存中的binlog文件没有落盘,也就是说此时的GTID位点不是准确的,是之前的GTID信息,以这个建立起复制信息,会去主库拉取之前已经执行过的GTID信息,就出现了SQL线程错误。

解决办法:
/etc/my.cnf 中添加
slave_skip_errors=1062
重新启动mysql服务,SQL线程便恢复正常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值