宝塔定时备份到对象存储:网站丢不了

备份只放服务器本地等于没备:宝塔计划任务 + 对象存储,每天凌晨自动打包网站文件和数据库、异地保存 30 天,定期还要验证能恢复。小够手把手配置,丢站风险直接归零。

我是小够,只推够用的 VPS。

备份的铁律:不在异地的备份,等于没备份。服务器硬盘挂了、机房出问题了、账号被黑删库了——存在本机的备份跟着一起陪葬。今天讲宝塔面板的"计划任务 + 对象存储"方案,每天凌晨自动备份,网站文件和数据库双保险。

为什么用对象存储

对象存储(如阿里云 OSS、腾讯云 COS、七牛云等)有三个好处:便宜(网站备份每天几十 MB,一个月 1-2GB,费用忽略不计)、稳定(多副本,不会说没就没)、和你 VPS 不在同一机房(机房级故障也影响不到它)。

记住选和你访客近的区域——恢复下载时快,真到恢复那天,每一分钟都是钱。

第一步:在对象存储建 Bucket

去对象存储控制台新建一个 Bucket,注意三点:

  1. 私有读写,别选公共读——备份包里可是有数据库密码和用户数据。
  2. 开版本控制(如果支持):误删了还能找回来,多一层保险。
  3. 记下四个东西:Endpoint(区域地址)、Bucket 名、AccessKey ID、AccessKey Secret。

AccessKey 别给太高权限:只给这个 Bucket 的读写权限。密钥泄露了,影响范围也只限这一个备份桶——最小权限原则,在哪都适用。

第二步:宝塔里接上对象存储

宝塔面板 → 软件商店,搜索对应厂商的对象存储插件安装。装好后在插件里填上刚才的 Endpoint、Bucket、密钥,点"测试连接"。通了再往下走,别跳过测试——半夜备份失败没人告诉你,等要用的时候才发现连上都没连上,那就搞笑了。

第三步:建两个计划任务

去「计划任务」,建两个任务,错开时间:

任务一:备份网站文件

  • 任务类型:备份网站 → 选要备份的站点(多站的每个站单独建)
  • 执行周期:每天,凌晨 3:00(选访客最少的时间段)
  • 备份到:选你刚配的对象存储
  • 保留份数:30 份(保留一个月的,存储费用扛得住,恢复粒度也够细)

任务二:备份数据库

  • 任务类型:备份数据库 → 全选所有数据库
  • 执行周期:每天,凌晨 3:20(和文件备份错开 20 分钟,别同时跑抢磁盘 IO)
  • 同样存对象存储,保留 30 份

为什么文件和数据库分开?因为恢复时你可能只需要恢复其中一个——比如误删了一篇文章,只恢复数据库就行,不用动文件。分开备,恢复灵活。

第四步:验证备份真的能用(最重要)

这一步 90% 的人跳过,也是最重要的一步。等第一次备份跑完:

  1. 去对象存储控制台,下载最近的一份网站备份包和数据库备份。
  2. 解压看看:网站文件全不全?数据库 SQL 文件能不能正常导入测试库?
  3. 抽一个不重要的测试站,实际演练一次完整恢复。

备份了但恢复不了,等于没备。小够见过太多"备份了三年,恢复时发现包是坏的"的惨案——没演练过的备份,等于没备份。

以后每季度抽一次,随机下一份备份验证。养成习惯,关键时刻不抓瞎。可以在日历上设个重复提醒,3 个月一次,10 分钟的事。

进阶:备份策略再往上一层

基础方案跑顺了,可以考虑:

  • 多地备份:重要站点,备份到两个不同厂商的对象存储。极小概率事件(厂商级故障)也防住了。
  • 本地+异地双份:计划任务里同时保留一份本地备份(恢复快)+一份对象存储(异地安全),恢复时先用本地的,本地没了用异地的。
  • 备份告警:宝塔计划任务支持执行结果通知,备份失败时推送到微信/邮箱——失败的备份没人知道,等于没备份,告警必须开。

备份恢复演练 SOP(建议收藏)

光有备份不够,每季度做一次恢复演练。标准流程:

1. 准备测试环境。开一台临时小 VPS(或本地虚拟机),装好同版本面板/PHP/MySQL。别在生产机上演练,恢复操作会覆盖数据。

2. 下载备份包。从对象存储下最近的一份网站备份+数据库备份,记下文件名和日期——顺便验证了"你找得到备份"。

3. 恢复并验证。网站文件解压到测试目录,数据库导入测试库,改 hosts 指向测试机 IP,完整点一遍:首页、文章页、后台登录、发一篇测试文章。

4. 记录结果。恢复用时多久?有没有报错?哪个环节卡住了?记下来,下次更快。演练的价值不在"成功",在"发现备份链条哪里会断"。

演练一次 30 分钟,一年 4 次,2 小时换来的是"真出事时不慌"。这笔账,怎么算都划算。

不同规模的备份策略

备份不是一刀切,按网站规模来:

个人博客(1-2 个站):本文的方案就够了——每天自动备份、保留 30 天、季度演练。成本几块钱,省心。

多站点(5+ 个站):按站点分组备份,重要站点每天备、次要站点每周备。保留策略差异化:重要站保留 30 天,次要站保留 7 天——备份也有成本,钱花在刀刃上。

业务站(靠网站吃饭):每天多次备份(比如每 6 小时一次数据库),保留 30 天以上,异地双备份(两个不同厂商的对象存储),恢复演练每月一次。业务站的备份预算,应该是运维预算里优先级最高的一项——网站挂一小时的损失,够买十年备份。

备份的"3-2-1"再提醒

备份圈有句老话叫 3-2-1:3 份拷贝、2 种介质、1 份异地。本文的方案(本地一份+对象存储一份)已经满足了"异地",再进一步就是"多地"。记住:备份的终极目标不是"有备份",是"任何单点故障都丢不了数据"。

备份文件的加密:别让备份变泄密

备份包里有数据库密码、用户数据,备份文件本身也要保护:

  1. 传输加密:传到对象存储走 HTTPS,别用明文 FTP 传备份——半路被截获,等于把数据库送人。
  2. 存储加密:对象存储开服务端加密(一般一键开),就算存储端出问题,数据也是密文。
  3. 本地临时文件:备份脚本生成的本地临时包,传完就删,别在 /tmp 里躺着。定时任务里加一行删除命令,传完即焚。

备份的目的是"防丢",但别在防丢的路上"泄密"——安全是闭环,备份环节不能是缺口。

小够总结

这套方案的成本:对象存储一个月几块钱,配置 20 分钟。换来的是:服务器彻底挂了,你也能在 1 小时内在新机器上恢复网站。记住备份四要素:自动执行、异地保存、定期验证、失败告警,缺一个都不算真备份。备份是建站里 ROI 最高的事——平时没用,用一次回本。