备份校验的四个层次
备份文件生成成功不等于可以恢复。校验要分四层递进:看导出是否正常结束(尾部标记)、看压缩包是否完整可解、看校验和是否与记录一致、最后定期抽样导入到临时实例跑一遍。前三层是每次备份都要做的自动化检查,第四层按周或按月进行,是唯一能证明恢复流程可用的手段。
基本信息
| 适用平台 | mysqldump / mydumper / xtrabackup 产出的备份文件 |
|---|---|
| 结束标记 | mysqldump 正常结束会写 Dump completed on ... |
| 压缩校验 | gzip -t file.sql.gz、zstd -t file.zst |
| 完整性校验 | md5sum / sha256sum 并与备份时记录比对 |
| 终极校验 | 抽样导入临时实例做冒烟测试 |
典型使用场景
- 每日备份流程的自动化收尾环节,不通过就立即告警
- 变更前的保护性快照:先确认备份可用再执行高风险操作
- 季度恢复演练:验证备份能否在可接受时间内还原出可用实例
- 归档前的入库存档检查,避免把坏文件长期保存
- 排查疑似损坏的备份,定位是导出阶段还是传输阶段出问题
日常校验脚本片段
日常校验脚本片段
set -euo pipefail
OUT=/data/backup/all_$(date +%F).sql.gz
mysqldump -uroot -p --single-transaction --source-data=2 --all-databases \
| gzip -6 > "$OUT"
gzip -t "$OUT" # 压缩完整性
zcat "$OUT" | tail -3 | grep -q "Dump completed" # 尾部结束标记
md5sum "$OUT" >> /data/backup/checksums.txt # 记录校验和
ls -lh "$OUT" # 人工复核体积趋势校验层次与判定
| 层次 | 检查方式 | 失败说明 |
|---|---|---|
| 结束标记 | 解压后看末尾是否有 Dump completed | 导出被中断或磁盘写满 |
| 压缩完整性 | gzip -t 或 zstd -t | 压缩包被截断或介质损坏 |
| 校验和 | md5sum 与备份时记录比对 | 文件在传输或存储中发生变化 |
| 抽样导入 | 导入临时实例并执行只读校验查询 | 结构或数据层面存在不可恢复问题 |
只比对文件大小波动不足以证明内容有效:大小相近的损坏文件在监控里毫无异常,必须结合尾部标记与校验和,定期再加上抽样导入。
抽样导入务必在隔离的临时实例上进行:直接把备份导入生产实例会引入历史数据并可能覆盖现有表。