上一篇
凌晨2:15,手机突然疯狂震动——监控系统报警MySQL从库同步失败!错误日志赫然显示:
[ERROR] [MY-010534] [Server] Error reading relay log event: ...
ER_RPL_RECOVERY_ERROR_READ_RELAY_LOG
作为值班DBA的你一个鲤鱼打挺从床上弹起来,咖啡都来不及泡就打开了远程终端,别慌!跟着我一步步排查解决这个经典的MySQL复制错误~
SHOW SLAVE STATUS\G
重点关注:
Last_IO_Error:
Last_SQL_Error: Error reading relay log event...
Relay_Log_File: mysql-relay-bin.000123
Relay_Log_Pos: 456789
df -h # 查看磁盘使用情况 du -sh /var/lib/mysql # 检查MySQL数据目录
(遇到过太多次因为磁盘爆满导致日志读取失败的案例了!)
mysqlbinlog /var/lib/mysql/mysql-relay-bin.000123 | tail -20
如果输出包含ERROR: Error in Log_event::read_log_event()
,说明日志确实损坏了
STOP SLAVE; START SLAVE;
👉 适合临时性IO错误,60%的情况这样就能恢复
STOP SLAVE; SET GLOBAL sql_slave_skip_counter = 1; START SLAVE;
⚠️ 注意:会丢失1个事件的数据一致性
STOP SLAVE; CHANGE MASTER TO RELAY_LOG_FILE='', RELAY_LOG_POS=4; START SLAVE;
💡 原理:让从库重新拉取主库binlog
-- 在主库查询当前binlog位置 SHOW MASTER STATUS; -- 在从库执行 STOP SLAVE; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000456', MASTER_LOG_POS=123456; START SLAVE;
-- 先在主库创建快照 FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; -- 记录File和Position -- 用mysqldump导出数据后解锁 UNLOCK TABLES; -- 在从库 STOP SLAVE; RESET SLAVE ALL; -- 导入数据后重新配置复制
监控三件套:
slave_net_timeout=60
(默认3600秒太长了!)Seconds_Behind_Master
值SHOW SLAVE STATUS
输出日志管理:
# my.cnf配置建议 relay_log_space_limit = 2G sync_relay_log = 1 relay_log_recovery = ON # 这个最关键!
自动化巡检脚本:
# 每天检查复制状态的示例脚本 if ! mysql -e "SHOW SLAVE STATUS\G" | grep -q "Running: Yes"; then send_alert "MySQL复制异常!" fi
这次事故教会我们:
relay_log_recovery
参数的重要性📅 最后检查时间:2025-08-15
👨💻 经验总结自3次真实生产环境故障处理
☕ 好的DBA总是备着双倍浓度的咖啡!
本文由 夕智伟 于2025-08-02发表在【云服务器提供商】,文中图片由(夕智伟)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/513708.html
发表评论