先把当时的情况摆出来。备份目录里文件按天生成,大小全是零,直到需要恢复时才发现,前面的备份全都不可用。

这类报错背后常见的原因有几处,逐个排除就行。备份命令失败但脚本继续执行了压缩。也可能是磁盘空间不足,写入被截断。

还有一种情况,数据库账号权限不足,导出内容为空。

先看备份文件大小和时间

ls -lh /data/backup/ | tail

手动执行一次看报错

mysqldump -u 备份账号 -p 库名 > /tmp/test.sql

给脚本加上失败即退出

grep -n 'set -e' /opt/backup.sh

等前面都确认过,再加一条校验逻辑

test -s /data/backup/latest.sql && echo ok

同一份数据我导出了两份,一份留底,一份拿来试。

这类问题以前遇到过,但这次的触发条件和上次不一样。

别只看报错消失,验证要多做一步。备份文件大小正常,脚本遇到错误会立即失败并告警。

提醒一点。备份是否可用要靠恢复演练验证,只看文件存在没有意义;空文件往往比没有备份更危险。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189