跳转至

数据备份与灾难恢复规范 💾

版本: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.zst
  • mysql-full-20260215.xbstream.gz
  • app-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. 恢复流程模板

  1. 验证备份完整性:

    restic check
    restic snapshots
    

  2. 恢复特定目录示例:

    restic restore latest --target /mnt/recovery --include /etc/nginx
    

  3. 数据库恢复示例(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 实际耗时
  • 完整性验证结果
  • 问题及改进措施

所有生产环境必须在上线上完成首次备份策略验证,并在变更后同步更新备份配置。