数据备份与灾难恢复规范 💾
版本:1.0
适用范围:所有生产服务器(RHEL 9.x+ 及兼容发行版,例如 openEuler、Anolis OS、Rocky Linux、AlmaLinux 等)
1. 核心原则与指标
- RPO(恢复点目标):关键业务 ≤ 4 小时,非关键 ≤ 24 小时
- RTO(恢复时间目标):关键业务 ≤ 4 小时,非关键 ≤ 24 小时
- 遵循 3-2-1 备份法则:3 份拷贝、2 种不同介质、1 份异地存储
- 备份必须定期(至少每季度)进行恢复测试,并记录结果
2. 备份分类与工具推荐
| 数据类型 | 推荐工具组合 | 备份频率 | 保留周期 |
|---|---|---|---|
| 系统配置 (/etc) | etckeeper / restic / rsync | 每日 | 90 天 |
| 应用数据 (/opt/data, /data) | restic / BorgBackup / rsync | 每日全量 + 每小时增量 | 30 天 + 月度归档(12 个月) |
| 数据库 (MySQL/PostgreSQL) | xtrabackup / pg_basebackup + WAL 归档 | 每日全量 + 连续 WAL | 30 天全量 + WAL 保留至空间允许 |
| 容器镜像与持久卷 | Podman save / Velero / restic | 每日/变更后 | 30 天 |
| 日志文件 | rsync 到集中日志服务器 | 实时/每小时 | 90–365 天(视合规要求) |
3. 备份路径规范(结合命名规范)
- 本地暂存目录:
/opt/backup/local/ - 异地/远程备份目标:
/opt/backup/remote/或对象存储挂载点(如 s3fs、rclone mount) - 文件命名示例:
system-config-20260215.tar.zstmysql-full-20260215.xbstream.gzapp-data-daily-20260215.restic-snapshot
4. 推荐备份实现示例:restic(通用文件备份)
初始化仓库(仅首次执行)
export RESTIC_REPOSITORY="s3:s3.example.com/bucket/$(hostname)"
export RESTIC_PASSWORD_FILE="/opt/conf/restic-repo-password"
restic init
每日备份脚本示例(/opt/scripts/backup-system-daily.sh)
#!/bin/bash
set -euo pipefail
export RESTIC_REPOSITORY="s3:s3.example.com/bucket/$(hostname)"
export RESTIC_PASSWORD_FILE="/opt/conf/restic-repo-password"
restic backup \
--tag daily \
--exclude-caches \
--exclude={/dev,/proc,/sys,/tmp,/run,/mnt,/media,/lost+found,/opt/backup} \
/etc /opt /home /var/log /data
# 自动清理旧快照
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
restic check
设置 cron:
0 3 * * * /opt/scripts/backup-system-daily.sh >> /opt/logs/backup/backup.log 2>&1
5. 数据库备份示例:MySQL + xtrabackup
每日全量备份:
xtrabackup --backup --target-dir=/opt/backup/mysql/full-$(date +%Y%m%d) \
--user=backup --password=xxx --parallel=8
增量 + binlog 归档(需配合 my.cnf 配置 log_bin)。
6. 恢复流程模板
-
验证备份完整性:
restic check restic snapshots -
恢复特定目录示例:
restic restore latest --target /mnt/recovery --include /etc/nginx -
数据库恢复示例(xtrabackup):
xtrabackup --prepare --target-dir=/opt/backup/mysql/full-20260215 systemctl stop mysqld rsync -av /opt/backup/mysql/full-20260215/ /var/lib/mysql/ chown -R mysql:mysql /var/lib/mysql systemctl start mysqld
7. 恢复演练与记录要求
- 每季度至少执行一次完整恢复测试(生产环境建议在 staging 环境模拟)
- 测试记录模板:
- 测试日期
- 恢复对象
- RTO 实际耗时
- 完整性验证结果
- 问题及改进措施
所有生产环境必须在上线上完成首次备份策略验证,并在变更后同步更新备份配置。