备份需可验证、可追溯、可还原:脚本须含时间戳命名、执行前校验与日志归档;自动清理保留最近5个备份;数据库备份分离凭证、压缩加密并校验完整性;定期演练还原并嵌入抽样验证点。

核心是让备份可验证、可追溯、可还原——脚本不能只“跑起来”,还要留痕、容错、留退路。
脚本必须包含三要素:时间标记、执行校验、日志归档
每次备份文件名里嵌入精确时间戳(如 backup_20260611_1536.tar.gz),避免覆盖;开头检查源目录是否存在、目标路径是否可写,失败立即退出并记录;结尾统一追加日志到 /var/log/backup.log,含成功标识、文件大小、耗时。例如:
- if [ ! -d "$SOURCE_DIR" ]; then echo "$(date): ERROR: Source $SOURCE_DIR not found" >> /var/log/backup.log; exit 1; fi
- tar -zcf "$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M).tar.gz" "$SOURCE_DIR" >> /var/log/backup.log 2>&1
- echo "$(date): OK → $(ls -lh "$BACKUP_DIR"/backup_*.tar.gz | tail -1)" >> /var/log/backup.log
自动清理旧备份但保留最小安全副本数
单纯按天数删(如 -mtime +7)有风险:若某天备份失败,可能误删最后可用备份。建议改用“保留最近 N 个”策略:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- find "$BACKUP_DIR" -name "backup_*.tar.gz" -printf '%T@ %p\0' | sort -zn | head -z -n -5 | xargs -0 rm -f
- 这行命令按修改时间排序,保留最新的 5 个备份,其余删除——不管它们是 1 天前还是 30 天前
- 配合定时任务每天执行,既防磁盘满,又兜底防连续失败导致无备份
数据库备份要分离凭证、压缩加密、验证完整性
MySQL 或 PostgreSQL 备份不能把密码写死在脚本里。应使用配置文件授权:
- 新建 ~/.my.cnf(权限 600),内容:[client] user=root password=your_secure_pass
- 备份命令用 mysqldump --defaults-extra-file=~/.my.cnf --all-databases | gzip > backup.sql.gz
- 备份后立即校验:gzip -t backup.sql.gz && echo "✓ Valid gzip" >> /var/log/backup.log
- 可选加 salt 哈希存档:sha256sum backup.sql.gz >> backup.sql.gz.sha256
恢复流程要提前验证,不能只靠“理论上能还原”
每月至少手动演练一次还原:从最新备份解压、导入、比对关键表行数。脚本里可加入简易验证点:
- 备份后抽样检查:tar -tzf latest.tar.gz | head -n 5 >> /var/log/backup.log(确认归档结构正常)
- 数据库备份后查导出是否含 “Dump completed on” 字样:gunzip -c backup.sql.gz | tail -10 | grep -q "Dump completed" || echo "⚠ Dump incomplete" >> /var/log/backup.log
- 把还原命令模板(如 mysql db_name )写进脚本注释区,贴在服务器显眼位置


















