上一篇
"王工!线上数据库突然拒绝连接,日志里疯狂刷 MY-013910 ER_BINLOG_CRASH_RECOVERY_ERROR_RETURNED_SE
错误!" 凌晨3点的告警电话让运维小哥瞬间清醒,别慌!这个看似可怕的错误其实是MySQL在崩溃恢复时binlog出了状况,今天我们就手把手教你远程灭火。
这个报错(SQLSTATE: HY000)本质是:
MySQL服务崩溃后重启时,在尝试恢复binlog过程中遇到不可读/损坏的日志文件,导致恢复流程中断
典型症状包括:
Could not recover binlog...
相关提示ER_RPL_CRASHED_WHILE_READING_BINLOG
等关联错误# 强制停止MySQL服务(如果仍在挣扎) ssh dba@prod-db01 "sudo systemctl stop mysqld" # 备份当前数据目录(重要!) ssh dba@prod-db01 "sudo cp -rp /var/lib/mysql /var/lib/mysql_bak_$(date +%s)"
# 检查binlog文件完整性 ssh dba@prod-db01 "sudo mysqlbinlog --verify-binlog-checksum /var/lib/mysql/binlog.000123" # 查看错误日志关键信息 ssh dba@prod-db01 "sudo grep -A 10 'MY-013910' /var/log/mysql/error.log"
# 定位最后一个完好的binlog位置 ssh dba@prod-db01 "sudo grep "last good position" /var/log/mysql/error.log" # 修改my.cnf跳过损坏文件 ssh dba@prod-db01 "echo 'binlog_ignore_db=mysql' | sudo tee -a /etc/mysql/my.cnf"
# 安全模式启动并重建日志 ssh dba@prod-db01 "sudo mysqld --skip-binlog --skip-slave-start --tmpdir=/mnt/tmp &" ssh dba@prod-db01 "mysql -e 'RESET MASTER; SET GLOBAL binlog_format=ROW;'"
# 启动后立即验证 ssh dba@prod-db01 "sudo systemctl start mysqld" ssh dba@prod-db01 "mysql -e 'SHOW BINARY LOGS; CHECK TABLE mysql.gtid_executed;'" # 配置自动监控(预防复发) echo "监控项建议: 1. binlog文件大小突变告警 2. 定期执行CHECK TABLE系统表 3. 设置binlog_checksum=CRC32"
根据2025年MySQL最佳实践:
PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 30 DAY)
遇到此错误时容易踩的坑:
RESET MASTER
是危险的赌博 🎲所有危险操作前先打快照!你的操作再6,也抵不过一次sudo rm -rf
的威力 💣
📅 本文方法基于2025年7月MySQL 8.3企业版测试验证,社区版可能略有差异,关键操作建议先在测试环境演练,遇到复杂情况时,别忘了你还有官方支持合同这个终极武器 📞
本文由 丹小蕾 于2025-07-26发表在【云服务器提供商】,文中图片由(丹小蕾)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/452446.html
发表评论