先把当时的情况摆出来。备份目录里文件按天生成,大小全是零,直到需要恢复时才发现,前面的备份全都不可用。
这类报错背后常见的原因有几处,逐个排除就行。备份命令失败但脚本继续执行了压缩。也可能是磁盘空间不足,写入被截断。
还有一种情况,数据库账号权限不足,导出内容为空。
先看备份文件大小和时间
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
同一份数据我导出了两份,一份留底,一份拿来试。
这类问题以前遇到过,但这次的触发条件和上次不一样。
别只看报错消失,验证要多做一步。备份文件大小正常,脚本遇到错误会立即失败并告警。
提醒一点。备份是否可用要靠恢复演练验证,只看文件存在没有意义;空文件往往比没有备份更危险。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。