必须在备份生成后立即计算并独立保存校验码且恢复前强制验证,因文件大小和时间戳无法反映内容篡改,只有MD5或SHA256能检测静默篡改,校验须与备份紧耦合、存于独立安全路径并严格验证。

备份文件被篡改后无法察觉,是恢复失败最隐蔽的原因——必须在备份生成后立即计算并独立保存校验码,且恢复前强制验证。
为什么不能只靠文件大小或时间戳判断备份是否被篡改
文件大小未变、修改时间正常,完全不意味着内容安全。攻击者删掉关键表但补上空数据,或用恶意 SQL 替换部分 INSERT 语句,文件体积和时间戳都不会变化。MD5 或 SHA256 是唯一能暴露这种静默篡改的手段。
- md5sum 和 sha256sum 都是单向哈希,哪怕只改一个字节,输出值就完全不同
- 校验码必须在备份命令执行完的下一秒生成,不能等人工操作或定时任务延后
- .md5 或 .sha256 文件不能和备份文件放在同一目录下——否则一起被删或覆盖就失去意义
如何在 mysqldump 后自动追加 MD5 校验
手动跑 md5sum backup.sql > backup.sql.md5 容易遗漏,应嵌入脚本固化流程。关键点不是“有没有校验”,而是“校验是否在备份完成那一刻发生”。
- 用
&&连接命令,确保 mysqldump 成功才执行校验:mysqldump -u user db > backup_$(date +%F).sql && md5sum backup_$(date +%F).sql > backup_$(date +%F).sql.md5 - 校验文件必须写入独立路径,比如
/backup/checksums/,且该目录权限设为chmod 700 - 避免用
md5sum -c时因路径不一致报错:校验前先cd /backup/checksums,再运行md5sum -c backup_2026-04-10.sql.md5
恢复前必须运行 md5sum -c 验证,否则等于没做
很多团队生成了 .md5 文件,却从不在恢复前验证。一旦备份中途被截断、磁盘写满或网络中断,md5sum -c 会立刻返回 FAILED,比导入时报语法错误快得多。
- 执行
md5sum -c backup_2026-04-10.sql.md5,输出含OK才可继续导入 - 若提示
backup_2026-04-10.sql: FAILED,不要重试导入,应立刻查日志、换备份源、检查存储空间 - 注意:.md5 文件里记录的是相对路径(如
backup_2026-04-10.sql),运行md5sum -c时当前目录需包含该文件,否则加--strict参数并指定绝对路径
真正容易被忽略的,是校验动作和备份动作之间的时间窗口——哪怕只有 3 秒延迟,也足够被自动化攻击脚本利用。所以不是“要不要加 md5”,而是“能不能保证 mysqldump 进程退出后 1 秒内,md5sum 已开始读取那个文件”。











