宝塔网站与数据库自动定时备份到对象存储的实操记录

核心导读:记录使用宝塔面板将网站文件和数据库自动备份到第三方对象存储的配置步骤,包括备份周期策略与权限避坑细节,避免单点故障导致数据丢失。

前阵子一台跑 WordPress 的小机器因为云厂商底层硬件异常导致磁盘只读,虽然折腾半天把数据拉了回来,但着实吓出一身冷汗。服务器本地磁盘存备份只防手抖误删,真遇到机器损坏或机房故障,本地镜像和备份都是废纸一张。

这两天把手头几个站点的文件和 MySQL 数据库重新理了下,全部配置自动挂载备份到腾讯云 COS 和阿里云 OSS 等对象存储。顺手把配置流程和几个容易踩坑的细节记下来,方便日后重装机器时对照参考。

1. 准备对象存储与安装插件

无论用阿里云 OSS、腾讯云 COS 还是七牛云,流程基本大同小异:

  1. 云厂商控制台准备:创建一个专门用于备份的 Bucket(存储桶)。权限务必选择私有读写,绝对不要开放公共读。随后创建一个子账号(RAM/CAM),只授予该 Bucket 的读写权限,拿到对应的 SecretId/AccessKeyIdSecretKey/AccessKeySecret
  2. 宝塔面板安装插件:在宝塔面板的「软件商店」搜索对应的插件(如“腾讯云COS”或“阿里云OSS”),安装后打开设置,填入刚才获取的密钥、Bucket 名称以及地域节点。
  3. 连通性校验:插件设置保存后,点击“列表”查看能否读取到 Bucket 内的内容。如果报错,优先检查地域节点是否填错(例如 ap-guangzhou 还是 oss-cn-hangzhou)以及子账号权限是否放行。

2. 备份频率与保留份数参考

很多朋友习惯把网站文件和数据库放在同一个定时任务里,或者每天全量备份整个几百兆的代码目录,这其实很浪费云存储容量和服务器带宽。代码和上传的附件一般变化较少,但数据库每时每刻都在变动,建议拆分为两个独立的任务。

站点类型数据库备份频率网站文件备份频率云端保留份数说明
个人博客 / 展示站每天 1 次(凌晨 3 点)每周 1 次(周日凌晨 4 点)保留 7 份数据变动小,每周备份代码足够,数据库留一周回滚期
内容站 / 轻度交互社区每天 2 次(12 小时一次)每 3 天 1 次保留 14 份兼顾回滚粒度与存储成本,错开业务访问高峰
密集交易 / 动态系统每 2-4 小时 1 次每天 1 次保留 30 份建议结合云数据库 binlog,对象存储留作冷备底线

3. 配置定时计划任务并手动测试

在宝塔「计划任务」中添加具体备份任务:

  • 任务类型:分别创建“备份网站”和“备份数据库”。
  • 执行周期:选择业务低峰期(如凌晨 03:00 至 05:00),两者的执行时间最好错开 30 分钟以上,避免高并发压缩占满服务器 CPU。
  • 备份到:下拉选择刚才配置好的对象存储名称,不要选“服务器磁盘”。
  • 保留份数:根据上文表格设置,宝塔会在上传成功后自动删除存储桶内超出份数的最旧文件。

配置完成后,务必在任务列表右侧点击“执行”进行一次实测。点击“日志”查看压缩与上传过程,看到提示 |-Upload file to storage bucket... Successful 才算真正跑通。同时登录云厂商后台,核对 Bucket 里是否已经生成了带日期的 .tar.gz.sql.gz 压缩包。

4. 几个容易忽略的排错细节

  • 本地磁盘临时空间不足:宝塔备份到对象存储的底层逻辑是“先在本地 /www/backup 打包压缩,再通过 API 上传至云端,上传完成后清理本地包”。如果服务器本身磁盘剩余空间小于网站文件的总大小,打包中途就会报错磁盘已满,导致任务中断。
  • 超时中断与大文件排除:如果网站附件目录动辄数十 G,压缩过程极易超时。可以在计划任务里设置“排除规则”,将缓存目录(如 wp-content/cache)或超大视频目录排除,大体积静态资源最好一开始就走直传对象存储,避免服务器背负打包负担。
  • 自动化监控:如果担心定时任务偶发网络抖动失败,可以开启面板自带的日志告警或消息推送,在备份失败时推送到钉钉或微信,省去每天手工巡检的麻烦。

常见问题与解答 (FAQ)

Q 备份推送到对象存储后,本地磁盘还会占用空间吗?

正常情况下不会。宝塔在本地打包并成功上传到云端后,会自动删掉本地生成的临时压缩包,只保留对象存储里的指定份数。

Q 配置完成后第二天看 Bucket 里没有文件,一般是什么原因?

优先查看宝塔计划任务的执行日志。常见原因包括计划任务执行时本地磁盘空间不足导致打包失败,或是云厂商子账号密钥缺少对该 Bucket 的写权限。

返回运维知识库