谷粒的泥坑

🌿谷粒的生活笔记 —— 在数字世界的泥坑中,播种代码、文字的种子,静待每一份热爱自然生长

WordPress自动化定时备份系统

网站的备份是一个很重要的工作,可以通过以下方案实现WordPress自动化备份系统:

一、脚本核心功能设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
# 定义备份目录和文件名
BACKUP_DIR="/opt/wordpress_backups"
DB_FILE="${BACKUP_DIR}/db_$(date +%Y%m%d).sql"
WEB_DIR="/var/www/html"
HASH_FILE="${BACKUP_DIR}/last_hash.txt"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 导出数据库并计算哈希
mysqldump -uDB_USER -pDB_PASSWORD DB_NAME > $DB_FILE
CURRENT_HASH=$(sha256sum $DB_FILE | awk '{print $1}')

# 检查数据库变化
if [ -f $HASH_FILE ] && [ "$CURRENT_HASH" == "$(cat $HASH_FILE)" ]; then
echo "数据库未变化,跳过备份"
rm $DB_FILE
exit 0
fi

# 备份网站文件
tar -czf "${BACKUP_DIR}/web_$(date +%Y%m%d).tar.gz" $WEB_DIR

# 记录新哈希
echo $CURRENT_HASH > $HASH_FILE

# 提交到Git仓库
cd $BACKUP_DIR
git add .
git commit -m "自动备份 $(date +%Y%m%d)"
git push origin main

二、关键实现细节

  1. 数据库变更检测
    通过SHA256哈希算法比对当日与上次备份的数据库内容差异,避免重复备份未变化数据。相比时间戳检测,哈希校验能精准识别内容变更。

  2. 备份范围控制
    • 数据库:使用mysqldump导出完整SQL文件

• 网站代码:打包WordPress安装目录(通常为/var/www/html)

  1. Git仓库管理
    建议创建专用Git仓库,配置SSH密钥实现免密推送。可添加.gitignore文件保留最近7天备份:
1
2
3
4
*.sql
*.tar.gz
!db_$(date +\%Y\%m\%d -d "-7 days").sql
!web_$(date +\%Y\%m\%d -d "-7 days").tar.gz

三、自动化部署步骤

  1. 环境准备
1
2
3
4
5
# 创建备份目录并初始化Git
sudo mkdir -p /opt/wordpress_backups
sudo chown -R $USER:$USER /opt/wordpress_backups
cd /opt/wordpress_backups && git init
git remote add origin GIT_REPO_URL
  1. 定时任务配置
    通过crontab设置每日4点执行:
1
echo "0 4 * * * /bin/bash /path/to/backup_script.sh" | crontab -
  1. 权限配置
    /etc/sudoers添加:
1
www-data ALL=(ALL) NOPASSWD: /usr/bin/mysqldump

四、增强方案建议

  1. 备份加密
    使用GPG加密敏感数据:
1
gpg --batch --yes --passphrase "YOUR_PASSPHRASE" -c $DB_FILE
  1. 异常通知
    添加邮件通知功能:
1
2
3
if [ $? -ne 0 ]; then
echo "备份失败" | mail -s "WordPress备份警报" admin@example.com
fi
  1. 云存储冗余
    可结合云厂商CLI工具实现多地存储:
1
2
# 腾讯云COS示例
coscmd upload "${BACKUP_DIR}/web_*.tar.gz" /

五、注意事项

  1. 确保MySQL用户具有SELECT, LOCK TABLES权限
  2. Git仓库建议使用LFS管理大文件
  3. 定期测试备份恢复流程(建议每月一次)
  4. 备份目录权限设置为700防止未授权访问

该方案结合了数据库哈希校验、Git版本控制等技术,在保证备份可靠性的同时实现最小化存储消耗。可根据实际服务器配置调整备份策略,例如使用--hex-blob参数处理二进制字段,或添加--skip-lock-tables参数避免锁表影响网站运行。