备份躺在一块盘上,攻击者删站时一起没了。这篇列出常被漏掉的备份项、3-2-1 的落地动作,以及两小时能跑完的恢复演练流程,还有 RPO 和 RTO 该怎么定。
备份在,站却回不来
去年帮一个客户处理过一次事故:服务器被入侵,站长很镇定地说"我每天备份,在宝塔里"。打开一看,备份文件就躺在同一块盘上。攻击者把整个站删干净的时候,备份一起没了。
这种事不罕见。数据里只有 27% 的站长准备了恢复方案——注意是方案,不是备份。"每天备份"和"能恢复"之间隔着好几步,每步都能断。

配图由 AI 生成,仅作示意
备份要装进去的东西,比想象的多
数据库是最容易想到的,也是最容易以为"备了数据库就够了"的。实际上常见的漏项:
- 上传目录。WordPress 的 wp-content、Z-BlogPHP 的 zb_users。图片、主题、插件都在这里,往往体积最大,也最常被跳过。
- 配置文件。数据库密码、密钥、域名绑定,都在这几个小文件里。
- SSL 证书与私钥。丢了证书,恢复后要重新签发,中间那段时间站点会报错。
- 计划任务。cron 里的定时备份、缓存清理、伪静态更新,恢复后经常是空的。
- 伪静态规则与重写配置。Nginx 的 conf 不在站点目录里,最容易被忘。
3-2-1 落到具体动作
三份副本、两种介质、一份异地。翻译成能执行的话:本地留一份、对象存储一份、另一台服务器或云盘一份;至少一份是自动的、不需要人记得;至少一份是别人删不到你的地方。
频率上,内容站每天一次库、每周一次全量就够。电商站按数据量算,通常要更密,另外加一个数据库 binlog 或者定时导出增量。
恢复演练怎么做,一次两小时
- 拿一台干净机器,装同版本 PHP 和数据库。版本不一致是恢复失败的头号原因。
- 先导库再放文件,导入后核对表前缀、字符集,中文乱码九成出在这里。
- 改本地 hosts 指过去,别急着切 DNS。这时候检查:首页能不能开、伪静态是否生效、上传目录有没有写权限、后台能不能登录、定时任务在不在。
- 图片逐页翻一遍。缩略图丢失、路径错误这类问题,只有点开才知道。
- 确认无误再切 DNS,把旧站挂成 301 过渡一段时间。
演练要记录两个数:RPO(能承受丢多少数据)和 RTO(多久能恢复)。这两个数才是备份方案的验收标准。写不出这两个数,说明方案还没成型。
备份文件本身也要防:别放在网站目录下,别用 123456.zip 这种名字。搜索引擎能爬到可下载的备份包,等于把你的库公开了。