阿克森云登录 / 注册English/中文/cn繁体/tw

第 5 课 · 备份与恢复演练(备份不算数,恢复才算)

上架第一小时 · L2 · 第 5 / 6 节 · 约 3 分钟

备份界的两句真话:「有备份」是最常见的错觉,「上个月演练恢复用了 47 分钟」才是可信的安全感。这一课搭一套最小可用的备份体系(3-2-1),然后——更重要的——教你做恢复演练:坏备份的三种死法都只在演练里暴露。

备份 3-2-1 与演练闭环示意

3-2-1:最小备份体系的结构

行业通行口径:3 份数据、2 种介质、1 份异地。单服务器的落地:本机快照(第 1 份,秒级恢复小事故)+ 本地备份目录(第 2 份,每日打包)+ 异地副本(第 3 份,推到另一台机器或对象存储——机房着火/账号事故时唯一的生还者)。自动化脚本骨架:

# /usr/local/bin/backup.sh —— 每日打包、滚动保留、推异地
#!/bin/bash
set -euo pipefail
STAMP=$(date +%F)
tar czf /backup/site-$STAMP.tar.gz /var/www /etc/nginx        # 网站与配置
mysqldump --all-databases | gzip > /backup/db-$STAMP.sql.gz   # 数据库全量
find /backup -name "*.gz" -mtime +7 -delete                    # 保留 7 天滚动
rsync -az /backup/ backupuser@异地IP:/data/backup/$(hostname)/ # 异地推送(SSH 密钥)
echo "$STAMP ok" >> /var/log/backup.log                        # 成功心跳
# crontab:30 3 * * * /usr/local/bin/backup.sh
# 心跳的意义:监控只查「backup.log 最后一行是不是今天」——备份静默失败是最坏的死法

坏备份的三种死法(演练才能发现)

死法症状演练哪一步暴露
任务早死了crontab 还在,磁盘满/凭据过期后每次静默失败第①步拉回的文件日期是三个月前
备份不完整tar 少目录、dump 截断、只备了数据没备配置第③步真恢复后关键数据缺失
恢复步骤失传文件都在,「先恢复哪个、权限怎么修」没人记得第③步卡住开始翻聊天记录

季度恢复演练:五步脚本

# 演练机:临时 VPS 或测试机(隔离环境,别在生产上演练恢复)
# ① 拉回:从异地存储拉最近全量(验证异地链路与凭据有效)
rsync -az backupuser@异地IP:/data/backup/主机名/ /restore/ && ls -lh /restore/
# ② 校验:归档完整性(不校验直接恢复=赌运气)
tar tzf /restore/site-*.tar.gz > /dev/null && echo "tar ok"
gzip -t /restore/db-*.sql.gz && echo "db ok"
# ③ 真恢复:解包+导入隔离环境
mkdir -p /restore/test && tar xzf /restore/site-*.tar.gz -C /restore/test
mysql -e "CREATE DATABASE restore_drill" && zcat /restore/db-*.sql.gz | mysql restore_drill
# ④ 计时与断言:RTO 实测值 + 关键数据抽查
mysql restore_drill -e "SHOW TABLES;" | head -5
# ⑤ 记录一页纸(日期/备份集/RTO 实测/发现的问题/下次日期),清理演练数据

记录里最值钱的两个数字:RTO 实测值(拉回到可用的分钟数——你唯一可信的恢复时间承诺)与发现的问题(演练的全部价值在这一行)。节奏:季度全量演练、月度只做①②轻量抽查、备份脚本变更后当周加练。

备份范围清单:别只备「看得见的」

新手备份最常漏的不是数据而是让数据能跑起来的东西。按清单核对:①业务数据(数据库 dump、上传文件目录);②配置(/etc/nginx、/etc/php 类、应用配置——「重装后网站起不来」多半是配置没备);③凭据的获取路径(不是把密码文件备进去,而是确认「密码管理器可访问 + 恢复流程文档在异地可读」——机器没了时你要能在别的设备上找到钥匙);④环境定义(装机清单/依赖版本/Dockerfile——恢复的目标是「业务能跑」,不是「文件都在」)。一个检验问题:假设这台机器现在物理消失,你手边的备份 + 一台新机器,多久能恢复服务?答不出来,就回到演练那一步。

两个口径问题:RPO 与加密

RPO(最多丢多久数据)由备份频率决定:每日备份 RPO=24 小时——凌晨备份、傍晚出事,这一天的数据就是代价。数据库类关键数据用 binlog/增量把 RPO 压到分钟级;内容站每日全量通常够。备份要加密:异地副本离开了你的机器边界,全量数据库备份明文躺在第三方存储上是重大暴露面——gpg/age 加密后再推送(密钥单独保管,密钥丢了备份等于没有——两把钥匙分开放)。

本节小结

  • 3-2-1 最小体系:本机快照 + 每日打包 + 异地推送,成功心跳进日志供监控;
  • 坏备份三种死法(任务死了/不完整/步骤失传)只在演练里暴露——季度五步演练,RTO 记实测值;
  • RPO 由频率决定、按数据价值分级;异地备份必须加密,密钥与备份分开保管。