Linux 服务备份与灾难恢复:全量、增量、异地容灾及快速恢复实战
一、备份基础理论与 3-2-1 规则
核心概念:
- 全量备份(Full Backup):完整复制所有数据,恢复最快,占用空间最大。
- 增量备份(Incremental Backup):仅备份上次备份后变化的数据,占用空间小,但恢复需全量+所有增量。
- 差异备份(Differential Backup):备份上次全量后变化的数据,恢复只需全量+最新差异。
3-2-1 备份规则(生产必遵):
RTO 与 RPO 设计:
- 核心数据库:RPO ≤ 5 分钟,RTO ≤ 15 分钟
- 普通应用服务:RPO ≤ 1 小时,RTO ≤ 4 小时
二、常用备份工具对比与选型
生产推荐组合:
- 数据库:Percona XtraBackup + binlog
- 容器:Velero 或 Podman volume + Restic
三、文件系统与配置备份实战
1. rsync 增量同步脚本
#!/bin/bash
# backup_files.sh
SOURCE="/data/app /etc/systemd/system /var/www"
DEST="/backup/local/$(date +%Y%m%d)"
REMOTE="root@backup.example.com:/backup/offsite/"
rsync -avz --delete --exclude='*.log' --backup --backup-dir=$DEST.incremental $SOURCE$DEST
rsync -avz $DEST$REMOTE
2. Restic 生产配置
# 初始化仓库
restic init --repo s3:https://s3.example.com/backups
# 备份脚本
restic backup --repo s3:... --password-file /etc/restic/pass \
--tag daily /data /etc /var/log/journal \
--exclude-if-present .nobackup
# 快照管理
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
3. Systemd 服务配置备份
# 定期备份关键目录
tar -czf /backup/config-$(date +%F).tar.gz \
/etc/systemd/system/ \
/etc/nginx/ \
/etc/mysql/ \
/etc/containers/systemd/
四、数据库备份与恢复实战(以 MySQL 为例)
1. Percona XtraBackup 热备
# 全量备份
xtrabackup --backup --target-dir=/backup/full-$(date +%F) --user=root --password=xxx --parallel=8
# 准备(恢复前)
xtrabackup --prepare --target-dir=/backup/full-xxx
# 增量备份
xtrabackup --backup --target-dir=/backup/inc-$(date +%F) --incremental-basedir=/backup/full-xxx
2. binlog 增量恢复
-- 查看 binlog 位置
SHOWBINARYLOGS;
-- 恢复到指定时间点
mysqlbinlog --start-datetime="2026-06-01 08:00:00" mysql-bin.000123 | mysql -u root
3. 自动化备份策略
五、容器与卷备份(Podman/Docker)
1. 卷备份
podman volume export mydata > mydata.tar
# 或使用 Restic 直接备份宿主机卷目录
2. Velero(Kubernetes 环境)
velero backup create full-backup --include-namespaces=prod --snapshot-volumes
velero restore create --from-backup full-backup
3. Quadlet 容器元数据备份 备份 /etc/containers/systemd/ 目录 + 镜像列表(podman images --format "{{.Repository}}:{{.Tag}}" > images.list)。
六、异地容灾与云备份架构
1. 异地复制方案
- S3 对象存储:Restic / MinIO + lifecycle 策略
- 跨区域复制:AWS S3 CRR、阿里云 OSS 跨区域复制
2. 容灾中心建设
- 云灾备:使用云厂商的数据库灾备服务 + 自建 Restic
3. 备份加密与不可变存储
restic backup ... --password-file ...
# S3 使用 Object Lock(合规锁定,防勒索)
七、生产环境备份最佳实践
Ansible Playbook 统一部署备份任务
Systemd Timer 替代 crontab:
[Timer]
OnCalendar=daily
Persistent=true
- Prometheus 监控备份任务成功率、备份大小、RPO
- 文档化恢复 SOP(Standard Operation Procedure)
八、常见备份与恢复故障排查案例
案例1:XtraBackup 恢复后启动失败 原因:未正确执行 --prepare 或 innodb 日志不一致。 解决:严格按照全量→prepare→增量应用顺序操作。
案例2:rsync 备份速度慢 优化:使用 --bwlimit、并行 rsync、多线程工具(mksquashfs 等)。
案例3:勒索病毒加密备份 解决:采用不可变存储(S3 Object Lock)+ 离线磁带 + 备份服务器隔离。
案例4:容器卷恢复后权限问题 解决:使用 podman unshare chown 或 :U 卷标签。
案例5:异地同步延迟导致数据不一致 解决:结合 rsync --delete + 应用层双写验证。