LinuxNotes

第 24 章:备份恢复

zjc 于 2026-01-24 发布

这是《Linux 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 备份的价值不在于文件存在,而在于能按目标恢复。恢复目标通常用 RPO 和 RTO 衡量:最多丢多少数据,最多停多久。没有演练过的备份不能视为可用备份。

24.1 备份目标

指标 含义
RPO 恢复点目标,最多丢失多少数据
RTO 恢复时间目标,最多允许多久不可用
RCO 恢复一致性目标
保留期 历史版本保存多久
加密 静态和传输加密

示例:

订单数据库
  RPO 5 分钟
  RTO 30 分钟
  全量每日 + 增量每 5 分钟
  异地保存
  季度演练

24.2 备份对象

系统:

  1. /etc
  2. systemd unit;
  3. crontab;
  4. 包列表;
  5. 磁盘分区表;
  6. 内核参数;
  7. 用户和 sudoers。

应用:

  1. 代码版本;
  2. 配置;
  3. Secret 引用;
  4. 证书;
  5. 部署清单。

数据:

  1. 数据库;
  2. 对象存储;
  3. 消息队列状态;
  4. 索引数据;
  5. 用户上传文件。

不要备份秘密明文,也不要把备份权限开放给所有人。

24.3 文件备份

tar:

sudo tar -czf /backup/etc-$(date +%F).tar.gz \
  --one-file-system /etc

rsync:

sudo rsync -a --delete \
  /data/ backup-server::data/

增量:

sudo rsync -a --delete --link-dest=/backup/current /data/ /backup/$(date +%F)/

恢复:

sudo tar -xzf etc-2026-08-25.tar.gz -C /tmp/restore
sudo rsync -a /backup/2026-08-25/ /data/

rsync 目标路径末尾 / 语义不同,执行前必须预览 --dry-run

24.4 数据库备份

MySQL 逻辑备份:

mysqldump --single-transaction --triggers --routines --events \
  -h db.internal -u backup_user -p shop > shop.sql

PostgreSQL:

pg_dump -Fc -h db.internal -U backup_user shop > shop.dump
pg_restore -h db.internal -U postgres -d shop_copy shop.dump

MongoDB:

mongodump --host mongo.internal --db order --out /backup/mongo
mongorestore --host mongo.internal --db order /backup/mongo/order

大数据库应使用物理备份、快照、WAL 或 oplog 方案,并按数据库官方恢复流程设计。

24.5 快照

文件系统快照:

sudo lvs
sudo lvcreate -s -n datalv-snap -L 10G /dev/datavg/datalv
sudo mount /dev/datavg/datalv-snap /mnt/snap
sudo umount /mnt/snap
sudo lvremove /dev/datavg/datalv-snap

云盘快照通常由平台提供。数据库快照要保证一致性:

  1. 使用数据库一致性快照能力;
  2. 或先冻结写入;
  3. 或使用备份锁;
  4. 恢复后执行一致性校验;
  5. 记录 LSN / WAL 位点。

24.6 加密与校验

加密:

gpg --symmetric --output backup.tar.gz.gpg backup.tar.gz
gpg --decrypt --output backup.tar.gz backup.tar.gz.gpg

校验:

sha256sum backup.tar.gz > backup.tar.gz.sha256
sha256sum -c backup.tar.gz.sha256

备份元数据:

备份时间
主机
数据集
版本
大小
校验值
加密方式
保留期限
恢复步骤

24.7 保留策略

常见策略:

每日 7 份
每周 4 份
每月 12 份
每年按合规保存

不要只保留“最新一份”。逻辑误删除、勒索加密、配置错误和数据损坏都依赖历史版本。

异地:

生产机房
  -> 同城备份
     -> 异地备份

备份存储要独立权限,避免生产主机被攻破后可直接删除备份。

24.8 恢复演练

演练步骤:

1. 选择备份点
2. 准备隔离环境
3. 恢复系统或数据
4. 启动应用
5. 校验数据
6. 执行核心业务用例
7. 测量 RTO 和 RPO
8. 记录问题
9. 优化流程

数据校验:

SELECT COUNT(*) FROM orders;
SELECT MAX(created_at) FROM orders;
SELECT * FROM orders ORDER BY id DESC LIMIT 10;

应用校验:

登录
创建订单
支付状态
查询历史
关键报表
上下游链路

24.9 监控与告警

必须监控:

指标 说明
备份成功率 是否按计划完成
备份时长 是否接近窗口
备份大小 突变需解释
校验结果 文件是否可读
恢复演练结果 是否可用
存储水位 备份空间
备份年龄 最近成功时间

告警示例:

最近一次成功备份超过 25 小时
备份失败连续 2 次
校验失败
备份耗时环比增长 50%
备份存储剩余低于 20%

24.10 恢复手册模板

# 数据恢复手册

## 1. 触发条件
- 故障类型:
- 影响范围:
- 决策人:

## 2. 恢复目标
- 目标 RTO:
- 目标 RPO:
- 备份点:
- 恢复环境:

## 3. 前置检查
- 备份完整性:
- 权限:
- 网络:
- 依赖服务:
- 通知对象:

## 4. 恢复步骤
- 命令:
- 检查点:
- 超时:
- 负责人:

## 5. 验证
- 数据一致性:
- 应用健康:
- 业务用例:
- 监控指标:

## 6. 收尾
- 切流:
- 清理临时资源:
- 复盘:
- 记录改进:

本章小结

备份设计从 RPO 和 RTO 出发,覆盖系统、配置、应用和数据。备份必须加密、校验、异地保存并有独立权限。恢复演练是唯一能证明备份可用的方式。

思考题

  1. RPO 和 RTO 分别决定什么设计?
  2. 为什么快照不能完全替代备份?
  3. 备份保留策略为什么要多版本?
  4. 如何验证数据库恢复点?
  5. 为订单系统设计备份和演练方案。