这是《Linux 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 备份的价值不在于文件存在,而在于能按目标恢复。恢复目标通常用 RPO 和 RTO 衡量:最多丢多少数据,最多停多久。没有演练过的备份不能视为可用备份。
24.1 备份目标
| 指标 | 含义 |
|---|---|
| RPO | 恢复点目标,最多丢失多少数据 |
| RTO | 恢复时间目标,最多允许多久不可用 |
| RCO | 恢复一致性目标 |
| 保留期 | 历史版本保存多久 |
| 加密 | 静态和传输加密 |
示例:
订单数据库
RPO 5 分钟
RTO 30 分钟
全量每日 + 增量每 5 分钟
异地保存
季度演练
24.2 备份对象
系统:
/etc;- systemd unit;
- crontab;
- 包列表;
- 磁盘分区表;
- 内核参数;
- 用户和 sudoers。
应用:
- 代码版本;
- 配置;
- Secret 引用;
- 证书;
- 部署清单。
数据:
- 数据库;
- 对象存储;
- 消息队列状态;
- 索引数据;
- 用户上传文件。
不要备份秘密明文,也不要把备份权限开放给所有人。
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
云盘快照通常由平台提供。数据库快照要保证一致性:
- 使用数据库一致性快照能力;
- 或先冻结写入;
- 或使用备份锁;
- 恢复后执行一致性校验;
- 记录 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 出发,覆盖系统、配置、应用和数据。备份必须加密、校验、异地保存并有独立权限。恢复演练是唯一能证明备份可用的方式。
思考题
- RPO 和 RTO 分别决定什么设计?
- 为什么快照不能完全替代备份?
- 备份保留策略为什么要多版本?
- 如何验证数据库恢复点?
- 为订单系统设计备份和演练方案。