搜索全站
网站迁移 10 分钟阅读

宝塔计划任务自动备份 WordPress 到 OSS / COS:完整配置

宝塔面板的计划任务能把 WordPress 备份完全自动化。本文讲清三种任务类型(备份网站/备份数据库/自定义 Shell 脚本)的配置方法、备份到阿里云 OSS 与腾讯云 COS 的具体步骤、密钥的安全存放方式、失败告警设置,以及如何验证备份真的可用。

U
UFO_PF 2016-06-06 · 阅读 10 分钟
宝塔 网站迁移
阅读提示
本文约 3,719 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:面板自带备份,为什么还要自己配

宝塔的”计划任务”确实能一键备份网站和数据库,但默认行为有两个问题:

  1. 备份存在本机磁盘,服务器故障就一起没;
  2. 没有失败告警,备份失败了你可能几个月都不知道。

补齐这两点,备份才算完整。本文按”可用”标准配置。

原理分析:宝塔计划任务的三种类型

类型 做什么 适用
备份网站 打包站点目录(不含数据库) 文件备份
备份数据库 mysqldump 导出 数据库备份
Shell 脚本 执行自定义命令 异地同步、清理、校验
日志切割 / 释放内存 系统维护 辅助

备份目录默认在 /www/backup/,分为 site/ 与 database/。

保姆级实操

第一步:创建数据库备份任务

计划任务 → 添加任务:

  • 任务类型:备份数据库;
  • 执行周期:每天 03:00;
  • 数据库:选择站点对应的数据库;
  • 保留份数:7。

第二步:创建网站文件备份任务

  • 任务类型:备份网站;
  • 执行周期:每周日 04:00;
  • 网站:选择站点;
  • 保留份数:4。

第三步:排除缓存目录(重要)

宝塔的网站备份默认打包整个站点目录,包括缓存。编辑任务 → 排除规则(部分版本支持),或者改用 Shell 脚本自己打包:

#!/usr/bin/env bash
# /root/wp-file-backup.sh
DOMAIN="mimangfei.com"
SRC="/www/wwwroot/${DOMAIN}"
BK="/www/backup/custom"
DATE=$(date +%F)

mkdir -p "$BK"
cd "$SRC" || exit 1

tar czf "${BK}/${DOMAIN}-files-${DATE}.tar.gz" \
  --exclude='wp-content/cache' \
  --exclude='wp-content/wflogs' \
  --exclude='*.log' \
  --exclude='wp-content/updraft' \
  wp-content wp-config.php .htaccess

# 保留 28 天
find "$BK" -name "${DOMAIN}-files-*.tar.gz" -mtime +28 -delete

计划任务 → 任务类型选”Shell 脚本”,脚本内容填 bash /root/wp-file-backup.sh。

第四步:配置阿里云 OSS 同步

方案 A:用面板的”阿里云 OSS”插件(软件商店安装),在计划任务里选”备份到阿里云OSS”。

方案 B:用 ossutil 命令行(更可控):

# 安装
wget http://gosspublic.alicdn.com/ossutil/1.7.17/ossutil64
chmod +x ossutil64 && mv ossutil64 /usr/local/bin/ossutil

# 配置(AccessKey 交互输入,不要写进脚本)
ossutil config
# 按提示填 endpoint、accessKeyID、accessKeySecret
# 同步脚本
ossutil cp -r /www/backup/database oss://my-wp-backup/database --update
ossutil cp -r /www/backup/custom  oss://my-wp-backup/files --update

第五步:配置腾讯云 COS 同步

# 安装 coscli
wget https://github.com/tencentyun/coscli/releases/download/v0.13.0/coscli-linux
chmod +x coscli-linux && mv coscli-linux /usr/local/bin/coscli

coscli config init   # 交互填写 SecretId、SecretKey、Region
coscli sync /www/backup/database cos://backup-1258xxxx/database --delete

第六步:创建异地同步的 Shell 任务

#!/usr/bin/env bash
# /root/sync-to-oss.sh
LOG=/var/log/wp-backup-sync.log
echo "$(date) 开始同步" >> "$LOG"

ossutil cp -r /www/backup/database oss://my-wp-backup/database --update >> "$LOG" 2>&1
RC=$?

if [ $RC -ne 0 ]; then
  echo "$(date) 同步失败" >> "$LOG"
  curl -s "https://你的告警webhook" -d "text=WordPress备份同步失败"
fi

执行周期:每天 05:00(比备份任务晚 2 小时,确保备份已完成)。

第七步:密钥安全

不要把 AccessKey 写进脚本明文(脚本可能被备份、被同步出去)。正确做法:

  1. 用 ossutil config 交互配置,密钥存在 ~/.ossutilconfig;
  2. 或存到单独文件并设权限:
cat > /root/.oss-credentials <<'EOF'
OSS_KEY=xxx
OSS_SECRET=xxx
EOF
chmod 600 /root/.oss-credentials

脚本里 source /root/.oss-credentials。

另外,OSS/COS 的 Bucket 必须设为私有读写,备份里含数据库密码和用户数据。

第八步:开启失败告警

宝塔计划任务支持”任务执行结果通知”,可绑定面板消息、邮件或企业微信/钉钉机器人。

没有机器人也可以用简单的 curl 告警(见第六步脚本)。

第九步:验证备份可用

# 1. 确认本地备份存在且非空
ls -lh /www/backup/database/ | tail -5

# 2. 确认 OSS 上有对应文件
ossutil ls oss://my-wp-backup/database/ | tail -5

# 3. 恢复演练(导入到测试库)
mysql -e "CREATE DATABASE wp_restore_test;"
gunzip < /www/backup/database/wordpress_2026-10-10.sql.gz | mysql wp_restore_test
mysql -e "SELECT COUNT(*) FROM wp_restore_test.wp_posts;"
mysql -e "DROP DATABASE wp_restore_test;"

常见踩坑与失败案例

  1. 备份目录在同盘 —— 面板默认存 /www/backup/,与站点同盘。磁盘故障一起丢,所以异地同步是必需项。
  2. 案例:某站配置了 OSS 同步,但 AccessKey 过期后同步一直失败,半年无人发现。站点出事时 OSS 上最新备份是八个月前的。告警比同步本身更重要。
  3. 备份文件体积暴涨 —— 没排除缓存目录,一个缓存插件能产生几个 GB 的无用数据。
  4. ossutil 权限问题 —— 用 root 执行计划任务时配置文件在 /root/.ossutilconfig,用其他用户执行会找不到。计划任务默认以 root 运行,保持一致即可。
  5. 数据库备份为 0 字节 —— 面板的数据库用户权限不足,或磁盘已满。定期检查文件大小。
  6. COS/OSS 流量费用 —— 每日全量上传会产生流量费,可用 --update(只传变化文件)或生命周期规则控制成本。

总结

宝塔计划任务能做出完整的备份闭环,但要做对四件事:分频率(数据库每日、文件每周)、排除缓存、异地同步、失败告警。其中最容易被忽略的是告警——静默失败的备份等于没有备份。配置完成后,按第九步做一次恢复演练,确认 /www/backup/ 里的 SQL 真的能导入。把这套配置写进你的运维文档,换服务器时照着做一遍即可。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。