首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >mysql主从环境: 主库磁盘坏了(os error 5), 从库更是先一步不同步了(my-01595)

mysql主从环境: 主库磁盘坏了(os error 5), 从库更是先一步不同步了(my-01595)

原创
作者头像
大大刺猬
发布2026-04-14 18:16:28
发布2026-04-14 18:16:28
340
举报
文章被收录于专栏:大大刺猬大大刺猬

导读

某mysql双主(其实是mariadb 10.5)环境,但实际上只有一个节点写,我们记录主库为db-A,从库为db-B故我们当作主从来分析要简单点.

问题: 发现数据库切换了, 还丢了部分数据(部分变更的数据找不到了).

分析和处理过程

不方便截图,故简单使用文字描述下,

  • 登录主库,发现无法使用use等命令, 报错可参考OS error code 5: Input/output error, 在操作系统层面ls 数据库目录均返回相关报错, 故推断存在文件系统损坏, 查看/var/log/messages确认 if (queue_event(mi, event_buf, event_len)) { mi->report(ERROR_LEVEL, ER_SLAVE_RELAY_LOG_WRITE_FAILURE, ER(ER_SLAVE_RELAY_LOG_WRITE_FAILURE), "could not queue event from master"); goto err; }很眼熟, 这不就是我们前几天分析could not find next log时候看到过的queue_event么, 但是产生该错的原因非常多, 虽然可以根据error日志的输出排除掉大部分, 但我们已经知道了主库的磁盘有问题了,就不再去分析从库这为啥了.
  • 由于配置了keepalived,也顺利的发生了切换, 那不应该丢数据啊. 登录从库, 查看主从状态, 发现主从在时间点A就已经断开了, 报错可参考: MySQL error code 1595 (ER_SLAVE_RELAY_LOG_WRITE_FAILURE): Relay log write failure: could not queue event from master 我们查询mysql源码(我手里就mysql源码, 这种报错都差不多的),发现报错逻辑为:
  • 我们根据主库的日志记录时间,确认发生切换的时间点B, 时间点B在A之后, 也就是先断开了主从, 然后发生了切换, 那么从库就肯定少部分数据了啊. 咋办呢?
  1. 如果主库能修复,那么我们只需要将从库的数据同步完主库即可切换过来.
  2. 如果主库修复失败, 就只能忍受丢一部分数据了(没得备份.)
  • 重启OS后(环境特殊,未验证不重启是否可行),使用xfs_repaire -L顺利"修复了"xfs文件系统, 再次重启后,主库正常, 待主库数据同步完之后, 即可切换到主库, 并重建从库.

总结

本次案例为: 主库磁盘问题导致切换, 但切换之前主从就已经不同步了,故切换后的库数据实际上是不完整的; 但好在成功修复了主库, 并将从库产生的日志回放成功了; 之后重建从库后主从状态均正常.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 分析和处理过程
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档