首页 / 建站向导 / 备份与容灾

备份与容灾

自动备份 + 异地副本 + 恢复演练:真正的备份是「还原成功过」,不是「打包过」。

🗄️ 场景 ⏱ 1.5小时 4 个步骤 难度 已完成 0 / 4 步
■ 全文速览 · 静态内容

备份与容灾:4 步完整做法

下面这份是静态全文(含脚本与自查清单),由 scripts/seo-prerender.js 从 data/steps.json 生成,供搜索引擎与关闭 JS 的访客阅读。上面那套是带进度保存的交互向导,内容和它完全一致。

  1. Step 1 · 盘点要备份什么、丢得起什么

    先分级:丢了一小时能恢复 / 一天 / 一周

    备份不是「把服务器打个包」,是按重要性分级、按级别定策略。

    先做一张清单(这是唯一步不能跳的):

    | 数据 | 丢了会怎样 | 级别 |
    |---|---|---|
    | 站点源文件或构建产物 | 重建即可,但要时间 | 中 |
    | data/*.json 内容数据 | 全站内容,丢了就白干 | 高 |
    | 数据库(如有) | 用户数据,不可再生 | 最高 |
    | 服务器配置 / Nginx 配置 | 重配一遍很烦 | 中 |
    | 日志 | 丢了无所谓 | 低 |

    分级策略:

    • 最高:每日全量 + 实时/每小时增量,异地存两份,必须演练过恢复
    • 高:每日备份,保留 30 天,异地一份
    • 中:每周备份,保留 4 周
    • 低:不备份或随服务器快照

    关键认知:没演练过恢复的备份,等于没有备份。很多人出事才发现「备份脚本半年没跑成功过」。

    合规:含用户个人信息的备份要加密存储,并写清保留期限。

    自查清单
    • 有一张数据分级清单
    • 每级都对应了备份频率与保留期
    • 含个人信息的数据已确定加密方案
  2. Step 2 · 搭建自动备份:脚本 + 计划任务

    打包 → 传到对象存储 → 记日志 → 失败告警

    备份脚本做四件事:打包、传走、记日志、失败告警。

    #!/bin/bash
    # backup.sh · 每日 03:10 执行
    set -u
    SRC="/www/wwwroot/你的域名"
    DATE=$(date +%Y%m%d)
    OUT="/tmp/site-$DATE.tar.gz"
    tar -czf "$OUT" -C "$(dirname $SRC)" "$(basename $SRC)" || { echo "打包失败"; exit 1; }
    coscli cp "$OUT" cos://你的桶/backup/ || { echo "上传失败"; exit 1; }
    echo "$DATE ok $(du -h $OUT | cut -f1)" >> /var/log/backup.log
    find /tmp -name 'site-*.tar.gz' -mtime +3 -delete

    计划任务:宝塔 → 计划任务 → Shell 脚本 → 每天 03:10;或 crontab -e 加一行。

    三条硬规则:

    1. 异地:备份绝不能只留在同一台机器上(硬盘坏了两个一起没)
    2. 失败要告警:脚本失败时发一条通知(钉钉 / 邮件),静默失败最可怕
    3. 留多份:至少保留 7 份历史(今天坏了、昨天的备份也可能是坏的)

    对象存储选型:腾讯云 COS / 阿里云 OSS,标准存储即可;开版本控制能防误删和勒索。

    自查清单
    • 备份任务在计划任务里且日志有成功记录
    • 备份存放在另一台机器 / 对象存储
    • 备份失败时能收到通知
  3. Step 3 · 做一次恢复演练(最重要的一步)

    在另一台机器上真还原一次,计时并记问题

    这一步 90% 的人会跳过,然后出事时才发现备份里少了个配置文件。

    怎么演练(每季度一次,1 小时):

    1. 找一台干净环境:新开一台按量付费服务器(几块钱),或用本地虚拟机 / Docker
    2. 只拿备份文件还原:假装原服务器已经炸了,不许去原机拷贝任何东西
    3. 全过程计时:记下每一步耗时(下载备份、解压、恢复数据、改配置、启动、验证)
    4. 验证业务可用:打开页面点一圈,不只是「文件存在」
    5. 写演练记录:恢复总耗时 / 卡住的环节 / 备份里缺了什么

    演练必会暴露的问题(提前预期):

    • 备份里没包含 Nginx 配置 → 补进去
    • 数据库没备份或版本对不上 → 补逻辑备份
    • 密钥、环境变量不在备份里 → 单独加密存一份
    • 恢复耗时远超预期 → 考虑做服务器快照镜像

    指标:把「恢复时间目标 RTO」写下来(比如 2 小时),演练结果超过它就改进方案。

    演练完销毁环境,别留一台开着忘记关的服务器。

    自查清单
    • 在独立环境完整还原成功过至少一次
    • 有演练记录(耗时 + 缺失项)
    • 备份内容已补齐演练发现的问题
  4. Step 4 · 监控 + 成本 + 定期清理

    备份任务要有人盯,存储成本要可控

    监控(备份本身也要被监控):

    • 备份日志里当天必须有成功记录 → 没记录就告警(见「服务器监控面板」场景)
    • 对象存储里的备份文件大小突变(比如从 50MB 变成 1KB)也要告警——多半是打包失败了
    • 每月一次:随机下载一份备份,解压看文件是否完整( cheap 且有效)

    成本:
    | 项目 | 省钱做法 |
    |---|---|
    | 存储 | 用生命周期规则:30 天后转低频存储,90 天后删除 |
    | 请求 | 别每分钟同步一次,每日一次足够 |
    | 流量 | 备份走内网 / 同地域上传,通常免费 |

    清理策略(写进脚本):

    • 本地临时包保留 3 天
    • 对象存储:每日备份保留 30 天,每周备份保留 12 周,每月备份保留 12 个月
    • 别无限保留:不清理的备份是纯成本,且含个人信息的数据无限保留本身就是风险

    最后:把「备份策略 + 恢复步骤 + 联系人」写成一页文档,放在能被找到的地方(不是只有你自己电脑里)。真出事的时候,你需要的是照着做,不是回忆。

    自查清单
    • 备份失败 / 大小突变会告警
    • 对象存储配了生命周期规则
    • 恢复步骤文档化且别人也能看懂

关于备份与容灾,你大概还想问

备份与容灾一共几步?大概要多久?

共 4 步,约 1.5小时:1) 盘点要备份什么、丢得起什么;2) 搭建自动备份:脚本 + 计划任务;3) 做一次恢复演练(最重要的一步);4) 监控 + 成本 + 定期清理。每步都带操作说明、可复制的一键脚本和自查清单。

备份与容灾第一步要做什么?

盘点要备份什么、丢得起什么——先分级:丢了一小时能恢复 / 一天 / 一周。这一步做完,后面的步骤才有依据。

备份与容灾做完后怎么判断做对了没有?

监控 + 成本 + 定期清理——备份任务要有人盯,存储成本要可控。这一步的自查清单就是验收标准,全部勾上才算真正上线。