百转千回! 记一次 MySQL 主从同步异常的排查记录

本文记录了一次MySQL主从同步出现问题的排查过程,包括现象、主从同步原理、排查思路和恢复方法。在排查过程中,发现可能是binlog或relay log损坏导致的同步异常。最终通过分析binlog和relay log,确认relay log损坏,通过设置GTID跳过错误位点恢复了从库同步。
摘要由CSDN通过智能技术生成

本文主要内容如下:

一、现象

最近项目的测试环境遇到一个主备同步的问题:

备库的同步线程停止了,无法同步主库的数据更改。

备库报错如下:

完整的错误信息:

Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.

上面的报错信息是什么意思呢?

翻译一下就是主库的 binlog 或者从库的 relay log 损坏了,造成这个问题的原因:

  • 可能是网络问题。
  • 也可能是主库或备库的代码 bug。

首先我们还是得复习下主从同步的原理才能更好地分析原因。

二、主从同步的原理

首先我们还是得复习下主从同步的原理才能更好地分析原因。

  • 从库会生成两个线程,一个 I/O 线程,名字叫做 Slave_IO_Running,另外一个是 SQL 线程,名字叫做 Slave_SQL_Running;
  • 从库的 I/O 线程会去请求主库的 binlog 日志文件,并将得到的 binlog 日志文件写到本地的 relay-log (中继日志)文件中;
  • 主库会生成一个 dump 线程,用来给从库 I/O 线程传 binlog;
  • 从库 SQL 线程,会读取 relay log 文件中的日志,并解析成 SQL 语句逐一执行。

三、排查思路

3.1 分析从库的同步状态

我们可以打印下从库的同步状态,看到如下几个关键信息:

Master_Log_File: mysql-bin.000956,代表从库读到的主库的 binlog file,

Read_Master_Log_Pos: 528071913,代表从库读到的主库的 binlog file 的日志偏移量

Relay_Log_File: relay-bin.000094,代表从库执行到了哪一个 relay log

Relay_Log_Pos: 123408769,代表从库执行的 relay log file 的日志偏移量

Relay_Master_Log_File: mysql-bin.000955,代表从库已经重放到了主库的哪个 binlog file。

Exec_Master_Log_Pos: 123408556,代表从库已经重放到了主库 b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值