当前位置:首页>Linux>Linux 服务备份与灾难恢复:全量、增量、异地容灾及快速恢复实战

Linux 服务备份与灾难恢复:全量、增量、异地容灾及快速恢复实战

  • 2026-10-11 07:04:25
Linux 服务备份与灾难恢复:全量、增量、异地容灾及快速恢复实战

Linux 服务备份与灾难恢复:全量、增量、异地容灾及快速恢复实战

一、备份基础理论与 3-2-1 规则

核心概念:

  • 全量备份(Full Backup):完整复制所有数据,恢复最快,占用空间最大。
  • 增量备份(Incremental Backup):仅备份上次备份后变化的数据,占用空间小,但恢复需全量+所有增量。
  • 差异备份(Differential Backup):备份上次全量后变化的数据,恢复只需全量+最新差异。

3-2-1 备份规则(生产必遵):

  • 3 份数据:生产 + 本地备份 + 异地备份
  • 2 种不同介质:磁盘 + 磁带/云对象存储
  • 1 份异地:不同城市/云厂商/可用区

RTO 与 RPO 设计:

  • 核心数据库:RPO ≤ 5 分钟,RTO ≤ 15 分钟
  • 普通应用服务:RPO ≤ 1 小时,RTO ≤ 4 小时
  • 归档数据:RPO 可放宽至 24 小时

二、常用备份工具对比与选型

工具
类型
优势
缺点
推荐场景
rsync
文件同步
速度快、增量优秀
无版本管理
配置、日志、小型文件
tar + gzip
全量压缩
原生、简单
速度慢、无增量
小规模全量
Restic
现代备份
去重、加密、云支持
学习曲线
通用文件/容器卷
BorgBackup
去重压缩
极致压缩比
单机为主
本地大容量备份
Velero
Kubernetes
容器原生
需 K8s
容器化服务
XtraBackup
MySQL 热备
物理热备、无锁
仅 MySQL
数据库
Bacula/Barman
企业级
集中管理
复杂
大型多业务环境

生产推荐组合:

  • 文件/配置:Restic + rsync
  • 数据库:Percona XtraBackup + binlog
  • 容器:Velero 或 Podman volume + Restic
  • 集中管理:Ansible + 自定义备份脚本

三、文件系统与配置备份实战

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. 自动化备份策略

  • 每日 02:00 全量
  • 每小时增量
  • binlog 实时同步到异地

五、容器与卷备份(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. 异地复制方案

  • rsync + SSH:实时/定时同步
  • S3 对象存储:Restic / MinIO + lifecycle 策略
  • 跨区域复制:AWS S3 CRR、阿里云 OSS 跨区域复制

2. 容灾中心建设

  • 冷备站(定期同步)
  • 热备站(Keepalived + 数据实时复制)
  • 云灾备:使用云厂商的数据库灾备服务 + 自建 Restic

3. 备份加密与不可变存储

restic backup ... --password-file ...
# S3 使用 Object Lock(合规锁定,防勒索)

七、生产环境备份最佳实践

  1. 分层备份策略:

    • 关键数据:每小时增量 + 每日全量
    • 配置/代码:每日 Git + rsync
    • 日志:短期本地 + 长期归档
  2. 自动化与编排:

    • Ansible Playbook 统一部署备份任务

    • Systemd Timer 替代 crontab:

      [Timer]
      OnCalendar=daily
      Persistent=true
  3. 监控与告警:

    • Prometheus 监控备份任务成功率、备份大小、RPO
    • 告警规则:备份失败、备份大小异常下降
  4. 安全与合规:

    • 备份数据加密传输与存储
    • 访问控制(最小权限)
    • 定期审计备份完整性(restic check)
  5. 测试与演练:

    • 每月至少一次恢复演练
    • 文档化恢复 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 + 应用层双写验证。

最新文章

随机文章