报错是这么冒出来的。磁盘告警显示数据目录所在分区已满,查下来二进制日志占了大半,删了几个文件之后数据库直接报错。

排查方向其实有限,先把可能性排一排。日志保留天数设置太长,或者从未自动清理。也可能是大批量写入产生了大量日志。

少数情况下是从库长时间断开,日志无法被自动清理。

先看日志占用和当前文件

mysql -e 'show binary logs' | tail -5

然后按时间清理过期日志

mysql -e 'purge binary logs before now() - interval 3 day'

调整保留时长

grep -n expire_logs_days /etc/my.cnf

剩下的就是确认从库是否还在同步

mysql -e 'show slave status\G' | grep Running

这类改动我都写进变更记录,过两周再出问题时能对上号。

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

别只看报错消失,验证要多做一步。磁盘占用降到安全线以下,主从同步正常,日志按策略自动清理。

这里还有个坑。不要在文件系统里直接删日志文件,索引对不上会导致后续写入失败,必须用命令清理。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189