AI个人学习
和实操指南
资源推荐1

近期网站频繁崩溃,刚恢复,写个Wordpress利用免费云盘自动备份脚本

服务器崩溃导致网站数据丢失简直是灾难!如果你只是个小网站,买不起多备份服务器,也不会配置网站备份,希望对面临同样问题的朋友有帮助。

适用于 Linux 服务器 ,保证网站数据安全,即使服务器损坏也能恢复数据。


特点 :

  • 定时备份 WordPress 指定目录和数据库
  • 更新判断 判断文章是否有更新来执行备份任务
  • 自动上传 到阿里云盘
  • 自动清理 旧备份,避免占用过多存储

 

📌 1. 安装阿里云盘客户端

💡 先安装 阿里云盘 CLI ,用于文件上传。

🔹 Ubuntu / Debian

sudo curl -fsSL http://file.tickstep.com/apt/pgp | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg > /dev/null && echo "deb [signed-by=/etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg arch=amd64,arm64] http://file.tickstep.com/apt aliyunpan main" | sudo tee /etc/apt/sources.list.d/tickstep-aliyunpan.list > /dev/null && sudo apt-get update && sudo apt-get install -y aliyunpan

🔹 CentOS / RHEL

sudo curl -fsSL http://file.tickstep.com/rpm/aliyunpan/aliyunpan.repo | sudo tee /etc/yum.repos.d/tickstep-aliyunpan.repo > /dev/null && sudo yum install aliyunpan -y

📌 2. 登录阿里云盘

aliyunpan login

🔹 在浏览器中打开弹出的 URL,扫码登录 ,然后返回终端,等待显示“登录成功”。

📌 3. 创建本地备份目录

mkdir -p /www/backup

这个目录将用于存放本地备份,自行修改。

📌 4. 创建自动备份脚本

在 /www/backup/ 目录下,新建 backup_wp.sh 脚本:

nano /www/backup/backup_wp.sh

然后粘贴以下内容:

#!/bin/bash
# 备份目录
BACKUP_DIR="/www/backup"
WP_DIR="/home/www/wp-content" //替换为你要备份的目录地址
DB_NAME="数据库名"
DB_USER="数据库账号"
DB_PASS="数据库密码"
DB_HOST="localhost"
# 文章数量存储文件
NO_FILE="$BACKUP_DIR/no.md"
# 备份文件命名
DATE=$(date +"%Y%m%d-%H%M%S")
WP_BACKUP="$BACKUP_DIR/wp-content-$DATE.tar.gz"
DB_BACKUP="$BACKUP_DIR/db-$DATE.sql"
DB_BACKUP_GZ="$DB_BACKUP.gz"
LOG_FILE="$BACKUP_DIR/backup.log"
# 定义日志函数(既输出到终端,又写入日志)
log() {
echo -e "$1" | tee -a "$LOG_FILE"
}
log "---------------------------"
log "[`date`] 🚀 开始备份 WordPress 目录..."
# 检查 WordPress 目录是否存在且非空
if [ ! -d "$WP_DIR" ] || [ -z "$(ls -A "$WP_DIR")" ]; then
log "[`date`] 🚨 WordPress 目录为空,备份失败!"
exit 1
fi
# 获取数据库文章数量
ARTICLE_COUNT=$(mysql -u "$DB_USER" -p"$DB_PASS" -h "$DB_HOST" -D "$DB_NAME" -se "SELECT COUNT(*) FROM wp_posts WHERE post_type='post' AND post_status='publish';")
log "[`date`] 📊 数据库中文章总数: $ARTICLE_COUNT"
# 确保 no.md 文件存在,如果不存在,则创建并初始化
if [ ! -f "$NO_FILE" ]; then
echo "0" > "$NO_FILE"
log "[`date`] 🆕 no.md 文件不存在,已创建: $NO_FILE"
fi
# 读取 no.md 中的文章数量
PREVIOUS_COUNT=$(cat "$NO_FILE")
log "[`date`] 📋 读取 no.md 文件 ($NO_FILE) 中的文章数量: $PREVIOUS_COUNT"
# 如果文章数量未变化,则跳过备份
if [ "$ARTICLE_COUNT" -eq "$PREVIOUS_COUNT" ]; then
log "[`date`] 🛑 文章数量未变化,跳过备份流程。"
exit 0
fi
# 更新 no.md 文件
echo "$ARTICLE_COUNT" > "$NO_FILE"
log "[`date`] ✍️ 更新 no.md 文件,记录最新的文章数量: $ARTICLE_COUNT"
# 继续执行备份流程
log "[`date`] 📦 开始备份 WordPress 目录..."
tar -czf "$WP_BACKUP" "$WP_DIR" >> "$LOG_FILE" 2>&1
log "[`date`] ✅ WordPress 目录备份完成: $WP_BACKUP"
log "[`date`] 📦 开始备份数据库..."
if ! mysql -u "$DB_USER" -p"$DB_PASS" -h "$DB_HOST" -e "USE $DB_NAME" > /dev/null 2>&1; then
log "[`date`] 🚨 数据库连接失败,请检查数据库配置!"
exit 1
fi
mysqldump -u "$DB_USER" -p"$DB_PASS" -h "$DB_HOST" "$DB_NAME" > "$DB_BACKUP"
log "[`date`] ✅ 数据库导出完成: $DB_BACKUP"
log "[`date`] 📦 压缩数据库文件..."
gzip "$DB_BACKUP"
log "[`date`] ✅ 数据库压缩完成: $DB_BACKUP_GZ"
log "[`date`] ☁️  开始上传到阿里云盘..."
aliyunpan upload "$WP_BACKUP" /backup/ | tee -a "$LOG_FILE"
aliyunpan upload "$DB_BACKUP_GZ" /backup/ | tee -a "$LOG_FILE"
log "[`date`] ✅ 上传完成!"
log "[`date`] 🧹 删除 7 天前的本地备份..."
find "$BACKUP_DIR" -type f -mtime +7 -print -exec rm -f {} \; | tee -a "$LOG_FILE"
log "[`date`] ✅ 备份任务完成!"
# 删除日志文件
rm -f "$LOG_FILE"

保存并退出 :

按 Ctrl + X → 输入 Y → 按 Enter

📌 5. 赋予执行权限

chmod +x /www/backup/backup_wp.sh

📌 6. 设置定时任务(宝塔面板)

🔹 在宝塔中添加计划任务

  1. 打开宝塔面板
  2. 进入 计划任务 → 添加计划任务
  3. 任务类型 选择 Shell 脚本
  4. 任务名称 :WordPress 自动备份
  5. 执行周期 :每 6 小时
  6. 执行命令 :
bash /www/backup/backup_wp.sh
  1. 保存任务

📌 7. 手动测试备份

可以立即执行备份,看看是否正常:

/bin/bash /www/backup/backup_wp.sh

然后查看日志:

tail -f /www/backup/backup.log

如果一切正常,定时任务会自动运行。

🚨 常见异常排查

🔍 1. 备份卡在“正在压缩 WordPress 目录”

📌 解决方法:

ps aux | grep backup_wp.sh
top -c  # 查看 CPU 负载
ls -lh /www/backup/

如果 CPU 负载高,可能是目录太大,耐心等待即可。

🔍 2. SSH 断开后任务停止

📌 解决方法:使用 nohup

nohup /bin/bash /www/backup/backup_wp.sh > /www/backup/backup.log 2>&1 &

这样 SSH 断开也不会影响任务。

🔍 3. 如何恢复查看日志

tail -f /www/backup/backup.log

可以实时查看备份进度。

🔍 4. 任务执行时间过长,如何避免冲突

📌 解决方法:加锁机制
在 backup_wp.sh 开头添加:

if pgrep -f "backup_wp.sh" > /dev/null; then
echo "已有备份任务在运行,跳过此次执行。" >> /www/backup/backup.log
exit 1
fi

这样,如果上次任务还未完成,新任务不会启动。

🎉 现在,你的 WordPress 网站已经实现了全自动备份!

🚀 即使服务器崩溃,你也能随时恢复数据!

内容3
未经允许不得转载:首席AI分享圈 » 近期网站频繁崩溃,刚恢复,写个Wordpress利用免费云盘自动备份脚本

首席AI分享圈

首席AI分享圈专注于人工智能学习,提供全面的AI学习内容、AI工具和实操指导。我们的目标是通过高质量的内容和实践经验分享,帮助用户掌握AI技术,一起挖掘AI的无限潜能。无论您是AI初学者还是资深专家,这里都是您获取知识、提升技能、实现创新的理想之地。

联系我们
zh_CN简体中文