前阵子一台跑 WordPress 的小机器因为云厂商底层硬件异常导致磁盘只读,虽然折腾半天把数据拉了回来,但着实吓出一身冷汗。服务器本地磁盘存备份只防手抖误删,真遇到机器损坏或机房故障,本地镜像和备份都是废纸一张。
这两天把手头几个站点的文件和 MySQL 数据库重新理了下,全部配置自动挂载备份到腾讯云 COS 和阿里云 OSS 等对象存储。顺手把配置流程和几个容易踩坑的细节记下来,方便日后重装机器时对照参考。
1. 准备对象存储与安装插件
无论用阿里云 OSS、腾讯云 COS 还是七牛云,流程基本大同小异:
- 云厂商控制台准备:创建一个专门用于备份的 Bucket(存储桶)。权限务必选择私有读写,绝对不要开放公共读。随后创建一个子账号(RAM/CAM),只授予该 Bucket 的读写权限,拿到对应的
SecretId/AccessKeyId与SecretKey/AccessKeySecret。 - 宝塔面板安装插件:在宝塔面板的「软件商店」搜索对应的插件(如“腾讯云COS”或“阿里云OSS”),安装后打开设置,填入刚才获取的密钥、Bucket 名称以及地域节点。
- 连通性校验:插件设置保存后,点击“列表”查看能否读取到 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)或超大视频目录排除,大体积静态资源最好一开始就走直传对象存储,避免服务器背负打包负担。 - 自动化监控:如果担心定时任务偶发网络抖动失败,可以开启面板自带的日志告警或消息推送,在备份失败时推送到钉钉或微信,省去每天手工巡检的麻烦。