引言
「数据不是有没有备份,而是能不能恢复。」Linux 运维的核心风险就是数据丢失——误删、磁盘坏、勒索、机房断电。本文从备份策略设计讲起,系统覆盖 Linux 的备份武器库:rsync 增量同步、tar 打包、LVM/btrfs 快照、数据库一致备份、异地/云对象存储同步、加密,最后以「恢复演练」收尾——因为没验证过的备份等于没有备份。
前置:/linux-filesystem-disk/(文件系统/LVM/RAID)、/linux-performance-tuning/(磁盘 IO)。云对象存储见 [[infra]]。
目录
- 1. 备份策略设计:3-2-1 原则与 RPO/RTO
- 2. 备份的三种类型:全量/增量/差异
- 3. rsync:增量同步的瑞士军刀
- 4. tar 打包:归档与压缩
- 5. LVM/btrfs 快照:秒级一致性备份
- 6. 数据库备份:mysqldump 与一致性
- 7. 异地同步与云对象存储
- 8. 备份加密与自动化
- 9. 恢复演练:验证备份真的可用
- 10. 速查表
- 延伸阅读
1. 备份策略设计:3-2-1 原则与 RPO/RTO
3-2-1 原则(业界黄金标准):
3 份数据副本
2 种不同介质(磁盘 + 磁带/对象存储)
1 份异地存放(防机房级故障)
两个关键指标:
| 指标 | 含义 | 目标 |
|---|---|---|
| RPO(恢复点目标) | 最多丢多少数据 | 越小越贵 |
| RTO(恢复时间目标) | 多久恢复业务 | 越小越贵 |
RPO/RTO 决策:
数据变化大、业务重要 → 频繁备份/实时同步 → 小 RPO
恢复要求快 → 热备/高可用 → 小 RTO
成本权衡:RPO/RTO 越小,基础设施越贵
分层备份策略:
每日快照(RPO 1天)
+ 每小时增量(RPO 1小时)
+ 每周异地全量(异地)
+ 每月归档(长期保留)
心智:备份是「成本」不是「万能」——先定 RPO/RTO 目标,再选备份频率与介质。
2. 备份的三种类型:全量/增量/差异
| 类型 | 备份内容 | 空间 | 恢复速度 | 复杂度 |
|---|---|---|---|---|
| 全量 | 所有数据 | 大 | 快 | 低 |
| 增量 | 上次备份以来的变化 | 最小 | 慢(需链式) | 中 |
| 差异 | 上次全量以来的变化 | 中 | 中 | 中 |
备份链示意:
全量(周一) → 增量1(周二) → 增量2(周三) → 增量3(周四)
恢复:全量 + 增量1 + 增量2 + 增量3(全部重放)
常见组合:
周日常规:全量
周一到周六:增量
恢复慢?→ 改用「差异」(每天基于全量,恢复只需全量+最新差异)
记忆:全量重、增量轻、差异居中——日常用增量省空间,恢复用「全量 + 最新差异」平衡速度。
3. rsync:增量同步的瑞士军刀
rsync 只传输变化的块——支持增量、远程、断点续传:
# 本地备份
rsync -av /var/www/ /backup/www/
# 远程备份(走 SSH)
rsync -avz --delete /var/www/ user@backup:/backup/www/
# --delete:删除源中已不存在的文件(保持镜像一致)
# 排除与保留
rsync -avz --exclude 'cache/' --exclude '*.tmp' \
--link-dest=/backup/last /var/www/ /backup/current/
# 带进度与限速
rsync -avz --progress --bwlimit=2000 /var/www/ backup:/backup/www/
常用 rsync 选项:
| 选项 | 作用 |
|---|---|
| -a | 归档(递归+权限+时间) |
| -v / -z | 详细 / 压缩 |
| –delete | 删除源端不存在的 |
| –exclude | 排除目录 |
| –link-dest | 硬链接去重(类快照) |
| –bwlimit | 限速防占满带宽 |
增量+去重的「穷人快照」:
# 每次备份用 --link-dest 指向上次,未变化文件硬链接复用(省空间)
rsync -av --link-dest=/backup/$(date -d yesterday +%F) \
/data/ /backup/$(date +%F)/
记忆:rsync = 增量同步 + 远程安全(SSH)——
--link-dest还能变出「硬链接快照」,省空间不省时间戳。
4. tar 打包:归档与压缩
tar 打包归档(适合一次性/迁移/定期全量):
# 打包压缩
tar -czf backup_$(date +%F).tar.gz /var/www /etc
# 排除目录
tar -czf backup.tar.gz --exclude='/var/www/cache' /var/www
# 解包
tar -xzf backup.tar.gz -C /restore/path
# 只查看
tar -tzf backup.tar.gz | head
# 增量 tar(按 mtime)
tar -czf inc.tar.gz --newer-mtime=last_full.tar /var/www
tar 备份注意事项:
| 要点 | 说明 |
|---|---|
| 排除运行时缓存 | cache/log/tmp |
| 固定路径 | 恢复时 -C 到目标 |
| 校验 | tar -tzf 抽查完整性 |
| 边写边校验 | gzip -t 检验压缩包 |
tar 流式到远程:
# 边打包边 SSH 传输(不落本地盘)
tar -czf - /var/www | ssh backup 'cat > /backup/www.tar.gz'
记忆:tar 适合「归档快照」,rsync 适合「持续同步」——迁移用 tar、日常增量用 rsync。
5. LVM/btrfs 快照:秒级一致性备份
LVM 快照:写时复制,秒级创建,几乎零停机:
# 创建快照(先确认卷组有空间)
lvcreate -L 5G -s -n snap_$(date +%F) /dev/vg0/data
# 挂载快照备份
mount /dev/vg0/snap_$(date +%F) /mnt/snap
rsync -av /mnt/snap/ /backup/lv-snap/
# 完成删除快照
lvremove /dev/vg0/snap_$(date +%F)
btrfs 子卷快照(自带快照能力):
# 创建快照
btrfs subvolume snapshot /mnt/data /mnt/snapshots/data-$(date +%F)
# 快照之间还能增量发送
btrfs send /mnt/snapshots/data-1 | btrfs receive /backup/
快照 vs 传统备份:
| 维度 | 快照 | 普通备份 |
|---|---|---|
| 创建速度 | 秒级 | 视数据量 |
| 一致性 | 原子 | 可能不一致 |
| 依赖 | LVM/btrfs | 无 |
| 保留成本 | 写时复制省空间 | 全量拷贝 |
记忆:快照解决「一致性 + 秒级创建」——备份前先快照、再从容拷贝,绝不在热数据上直接 tar。
6. 数据库备份:mysqldump 与一致性
数据库备份要保证「一致性」——mysqldump 需锁表或事务快照:
# MySQL 逻辑备份(单事务快照,InnoDB 不锁表)
mysqldump --single-transaction --routines --triggers \
-u backup -p mydb > mydb_$(date +%F).sql
# 压缩 + 时间戳
mysqldump --single-transaction mydb | gzip > mydb_$(date +%F).sql.gz
# 恢复
gunzip < mydb_2026-09-28.sql.gz | mysql -u root mydb
# PostgreSQL(pg_dump 一致性快照)
pg_dump -h db -U postgres mydb > mydb_$(date +%F).dump
pg_restore -d mydb mydb_$(date +%F).dump
数据库备份策略:
逻辑备份(dump):小库每日
物理备份(快照/二进制):大库 + 一致性
binlog/PITR:任意时间点恢复
备份后验证:导入临时库抽查行数
铁律:数据库备份后必须「试恢复」——dump 文件损坏/缺库的情况,只有恢复演练能发现。
7. 异地同步与云对象存储
异地容灾:备份必须出本机:
# rsync 到异地备份机
rsync -avz --delete /backup/ backup@offsite:/backup/
# 同步到云对象存储(rclone 支持 S3/OSS/COS)
rclone sync /backup/ s3:bucket/backup --s3-acl private
# 或 AWS CLI 同步
aws s3 sync /backup/ s3://bucket/backup --storage-class STANDARD_IA
对象存储备份的收益:
| 特性 | 说明 |
|---|---|
| 异地 | 跨地域冗余 |
| 版本化 | 防误删(开启 versioning) |
| 生命周期 | 自动降冷归档 |
| 成本 | 按量付费 |
异地策略分层:
同机备份(快):快速恢复
异地备份(稳):防机房故障
云对象存储(归档):长期保留 + 勒索防护(不可变存储)
记忆:异地备份是 3-2-1 原则的「1」——本机、异地、云归档三层,覆盖从误删到机房级故障。
8. 备份加密与自动化
敏感数据备份必须加密(防介质丢失泄密/勒索):
# 用 gpg 加密
gpg --encrypt --recipient backup@corp.com backup.tar.gz
# 或 tar + 加密流(openssl)
tar -czf - /data | openssl enc -aes-256-cbc -salt -pbkdf2 \
-k "$BACKUP_KEY" > backup.tar.gz.enc
自动化:cron / systemd timer(见 /linux-systemd-services/):
# 每日凌晨 1 点备份 + 通知
0 1 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
backup.sh 骨架:
#!/bin/bash
set -e
TS=$(date +%F)
# 1. 快照
lvcreate -s -n snap_$TS /dev/vg0/data
# 2. 拷贝
mount /dev/vg0/snap_$TS /mnt/snap && rsync -a /mnt/snap/ /backup/data/
# 3. 清理
umount /mnt/snap; lvremove -f /dev/vg0/snap_$TS
# 4. 异地同步
rsync -az /backup/ offsite:/backup/
# 5. 校验 + 通知
echo "backup ok $(date)" >> /var/log/backup.log
记忆:备份自动化 = 快照 + 拷贝 + 清理 + 异地 + 通知——脚本要幂等、留日志、失败能告警。
9. 恢复演练:验证备份真的可用
没验证过的备份 = 没有备份——恢复演练是备份的验收测试:
演练目标:
1. 能否从备份恢复数据?
2. 恢复耗时多久(RTO 实测)?
3. 恢复后的数据是否一致(RPO 达标)?
演练清单:
# 1. 文件恢复验证
tar -tzf backup.tar.gz | wc -l # 条目数合理?
rsync -n -av /backup/ /test/ # 试运行(--dry-run)
# 2. 数据库恢复验证
gunzip < mydb.sql.gz | mysql -u root testdb
mysql -e "SELECT COUNT(*) FROM testdb.orders;" # 抽查关键表
# 3. 异机演练
# 在另一台机器上完整恢复 → 确认业务能起来
# 4. 记录结果
echo "$(date) 恢复演练通过:耗时 23min,数据一致" >> /var/log/backup.log
演练频率建议:
| 备份类型 | 演练频率 |
|---|---|
| 日常文件备份 | 每月抽查 |
| 数据库备份 | 每季度完整恢复 |
| 容灾异地 | 每年全链路演练 |
铁律:RPO/RTO 是「演练出来的」不是「规划出来的」——没在真实恢复中量过的指标都是拍脑袋。
10. 速查表
| 需求 | 做法 |
|---|---|
| 策略 | 3-2-1:3 份、2 介质、1 异地 |
| 增量同步 | rsync -avz --delete |
| 归档 | tar -czf / tar -tzf 校验 |
| 秒级快照 | lvcreate -s / btrfs sub snapshot |
| 数据库 | mysqldump –single-transaction |
| 异地 | rsync offsite / rclone S3 |
| 加密 | gpg / openssl enc |
| 自动化 | cron + backup.sh + 通知 |
| 校验 | tar -t、恢复抽查、异机演练 |
| 瘦身 | 生命周期降冷、定期清理旧备份 |
一句话记忆:备份按 3-2-1 设计、RPO/RTO 定频率;rsync 干增量、tar 干归档、快照干一致性、dump 干数据库;本机+异地+云三层防一切故障;敏感数据加密、cron 自动化;最后恢复演练是验收**——测过的备份才算数。**
延伸阅读
- /linux-filesystem-disk/ — LVM/RAID 与磁盘
- /linux-systemd-services/ — Timer 定时自动化
- /linux-journald-logging/ — 备份日志与审计
- [[infra]] — 云对象存储与容灾
- [[database]] — 数据库备份与复制
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。