文章资讯 / 站群运营 / 站群数据备份方案:宝塔面板设置定时备份到阿里云OSS的自动脚本配置

站群数据备份方案:宝塔面板设置定时备份到阿里云OSS的自动脚本配置

发布时间: 分类:站群运营 作者:188mi 来源:互联网 阅读:84

站群数据备份最省事的做法,是用宝塔面板的计划任务调用阿里云OSS命令行工具,把网站目录、数据库和面板配置定期同步上去。核心就是一个自动脚本加一条定时任务。

为什么不直接用宝塔面板自带的备份,而要接 OSS?

宝塔面板自带的计划备份,会把备份文件放在服务器本地目录,默认在 /www/backup 下。站群的特点是站点数量多,一次全量打包动辄几十 GB 的量级,本地磁盘很快被吃满;更麻烦的是,如果服务器本身出问题——被回收、系统盘损坏、误格式化——本地备份会跟着一起丢。备份的第一原则是异地,第二份副本必须放在另一台机器或另一个存储上。

同步到阿里云 OSS 能解决三件事:存储单价通常比再买一块数据盘更低,低频和归档类型的单价更低(具体价格以阿里云控制台页面为准);OSS 支持版本控制和生命周期规则,文件被覆盖或误删还能回滚;备份不再占用服务器自身的磁盘。

宝塔软件商店里也有云存储类插件可以直接对接 OSS,能用。之所以推荐脚本方案,是因为备份哪些目录、保留多久、怎么压缩、失败要不要告警,全部由你控制。站群的目录结构往往不标准——多站点、多数据库、附件分散在不同盘——脚本比插件更灵活。

动手前需要准备哪些东西?

按顺序准备,缺一样后面都会卡住。

  1. OSS Bucket。阿里云控制台 → 对象存储 OSS → Bucket 列表 → 创建 Bucket。地域尽量选和服务器同地域;读写权限选私有,不要图省事开公共读;建议开启版本控制,误删可恢复。
  2. RAM 子账号密钥。控制台 → 访问控制 RAM → 用户 → 创建用户,勾选"OpenAPI 调用访问",拿到 AccessKey ID 和 Secret。授权建议自定义策略,只给这一个 Bucket 的读写权限,不要直接挂管理员权限。密钥只在创建时显示一次,丢了只能重建。
  3. 命令行工具。在服务器上装 ossutil 或 rclone,二选一。ossutil 是阿里云官方工具,和 OSS 贴合最好;rclone 支持多云,将来要同时备份到别家对象存储会省事很多。

脚本怎么写:ossutil 和 rclone 怎么选?

ossutil 的配置很简单:终端执行 ossutil config,依次填入 endpoint、AccessKey ID、AccessKey Secret。如果服务器本身就是阿里云 ECS,endpoint 用内网地址(形如 oss-cn-hangzhou-internal.aliyuncs.com),走内网不计公网流量费;服务器在别处则用公网 endpoint,流量费用标准以控制台页面为准。

一个够用的站群备份脚本大致分三段:

#!/bin/bash
DAY=$(date +%F)
# 1 数据库全量导出
for db in $(mysql -uroot -p"$DBPASS" -e "show databases" | grep -v -E "Database|information_schema|performance_schema|mysql"); do
  mysqldump -uroot -p"$DBPASS" --single-transaction "$db" | gzip > /www/backup/db/${db}_${DAY}.sql.gz
done
# 2 站点目录打包,排除缓存与日志
tar -czf /www/backup/site_${DAY}.tar.gz -C /www/wwwroot --exclude-from=/root/exclude.txt .
# 3 同步到 OSS
ossutil cp -r /www/backup oss://your-bucket/bt-backup/ --update

第二段的排除清单是关键。缓存、访问日志、缩略图目录体积大又没有备份价值,写进 exclude.txt 往往能压掉一半以上体积,直接决定这套方案能不能长期跑下去。用 rclone 的话,把最后一行换成 rclone sync /www/backup alioss:your-bucket/bt-backup --transfers 4 --checkers 8,remote 在 rclone config 里按 type 选 s3、provider 选 Alibaba 创建。

注意用 --update 或 sync 做增量,而不是每次全量重传。

定时任务在宝塔面板里怎么配?

入口在面板左侧 → 计划任务 → 添加任务。任务类型选"Shell 脚本",名称随意;执行周期按备份窗口来,站群建议放在业务低谷,比如每天凌晨跑一次全量、每隔几小时跑一次增量。

脚本内容有两种填法:直接把命令粘进输入框,或者把脚本存成 /root/backup_oss.sh 并 chmod +x,任务里只写 bash /root/backup_oss.sh。后者更好,以后改脚本不用再动面板配置。

两个容易踩的坑:面板执行计划任务的身份是 root,rclone 的配置文件默认在 /root/.config/rclone/,路径对不上就会报找不到 remote;同一条任务里不要既打包又同步到多个远端,串行执行时间容易超出周期,导致上一轮没跑完下一轮又起来。

最后到 OSS 侧配生命周期规则:Bucket → 数据管理 → 生命周期,让超过设定天数的备份自动转低频或归档、超期删除。天数设多少取决于你的恢复点目标,成本同样以控制台页面为准。

备份跑起来后,怎么确认真的成功了?

定时任务执行完,不等于备份可用。至少做三件事:

  • 看日志。计划任务详情页有执行日志,也可以直接看 /www/server/cron/ 下对应的 .log 文件,重点确认有没有报错、同步的文件数量对不对。
  • 核对体积。ossutil ls oss://your-bucket/bt-backup/ -s 看云端总量,和本地 du -sh /www/backup 对比,差距过大说明有目录被漏掉。
  • 做恢复演练。定期把 OSS 上最新的包用 ossutil cp 拉回测试机,解压、导入一个库、把站点跑起来。没验证过的备份只能算文件,不算备份。

再加一道保险:脚本末尾判断每一步的退出码,失败就发邮件或调用通知接口。站群站点多,靠人工每天翻日志不现实。

相关工具与阅读