You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB主从复制数周偶发中断、Relay log读取失败问题咨询

MariaDB主从复制周期性中断故障解决方案

故障核心特征

报错日志关键信息:

2021-09-06 14:15:52 11 [ERROR] Slave SQL: Relay log read failure: Could not parse relay log event entry. Internal MariaDB error code: 1594
[ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mariadb-bin.000054' position 466175364

伴随现象:每隔数周触发一次故障,故障发生时从库mysqld进程消失,/var/lib/mysql目录下存在数千个未清理的mysqld-relay-bin中继日志文件,使用MariaDB 10.3.18版本。

根因定位

  • 最高概率原因:从库中继日志自动清理机制未开启,数周时间积累的中继日志占满磁盘空间,导致mysqld进程被系统OOM杀掉或主动异常退出,异常退出过程中正在写入的中继日志出现部分损坏,下次启动时就会抛出1594号错误。
  • 次大概率原因:主从之间网络存在周期性波动,主库binlog发送过程中出现丢包,导致从库接收的中继日志写入不完整产生损坏。
  • 小概率原因:MariaDB 10.3.18版本存在复制相关的已知BUG,长时间运行后会出现中继日志写入异常。

故障修复步骤

临时恢复复制流程

  1. 登录从库执行 SHOW SLAVE STATUS\G,记录Relay_Master_Log_File和Exec_Master_Log_Pos两个字段的值,本次故障对应值为mariadb-bin.000054和466175364
  2. 停止从库复制:STOP SLAVE;
  3. 重置从库损坏的中继日志:RESET SLAVE;
  4. 重新配置复制位点,替换为实际的主库连接信息和上一步记录的位点:
CHANGE MASTER TO
MASTER_HOST='你的主库IP地址',
MASTER_USER='复制账号用户名',
MASTER_PASSWORD='复制账号密码',
MASTER_LOG_FILE='mariadb-bin.000054',
MASTER_LOG_POS=466175364;
  1. 启动从库复制:START SLAVE;
  2. 执行 SHOW SLAVE STATUS\G 确认Slave_IO_Running和Slave_SQL_Running两个字段值均为Yes,说明复制已恢复正常。

永久规避故障配置

  • 开启中继日志自动清理:在从库的my.cnf配置文件中添加relay_log_purge = 1,该参数默认开启,若之前被手动关闭必须改回,开启后会自动删除已经执行完成的中继日志,避免日志无限制积累。
  • 限制单条中继日志大小:添加配置max_relay_log_size = 1G,单个中继日志达到1G就自动滚动,避免单文件过大损坏后影响范围过大。
  • 升级稳定版本:若调整配置后仍然出现周期性故障,可以将MariaDB升级到10.3分支的最新稳定版,修复已知的复制相关BUG。
  • 配置磁盘监控:对从库/var/lib/mysql挂载的磁盘配置使用率告警,使用率超过80%时及时处理,避免磁盘占满导致mysqld进程异常退出。

内容的提问来源于stack exchange,提问作者Sebastian Dziedzic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:09:01