首页/数据/数据库速查/备份完整性校验
备份与恢复56 条

备份完整性校验

备份文件生成≠可恢复:通过尾部标记、压缩完整性、校验和、抽样导入四步确认,把坏备份拦在事故之前。

数据库速查数据更新于 2026-10-13

备份校验的四个层次

备份文件生成成功不等于可以恢复。校验要分四层递进:看导出是否正常结束(尾部标记)、看压缩包是否完整可解、看校验和是否与记录一致、最后定期抽样导入到临时实例跑一遍。前三层是每次备份都要做的自动化检查,第四层按周或按月进行,是唯一能证明恢复流程可用的手段。

基本信息

适用平台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 与备份时记录比对文件在传输或存储中发生变化
抽样导入导入临时实例并执行只读校验查询结构或数据层面存在不可恢复问题
只比对文件大小波动不足以证明内容有效:大小相近的损坏文件在监控里毫无异常,必须结合尾部标记与校验和,定期再加上抽样导入。
抽样导入务必在隔离的临时实例上进行:直接把备份导入生产实例会引入历史数据并可能覆盖现有表。

易错点

  • 磁盘写满产生的半截文件看起来正常:没有校验环节时会在恢复当天才暴露,损失的是整个恢复窗口
  • 校验和只在生成本地记录,恢复时忘了比对:文件在传输或归档中损坏却无人察觉
  • 备份失败被静默:只监控任务是否执行、不看退出码与产物校验结果,等于没有备份
  • 把抽样导入当成可选项一直拖着:恢复流程中的权限、字符集、版本差异问题迟早会在真实故障时集中爆发

数据来源与参考

  • MySQL 8.0 Reference Manual: mysqldump

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌