网站的备份是一个很重要的工作,可以通过以下方案实现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
cd $BACKUP_DIR git add . git commit -m "自动备份 $(date +%Y%m%d)" git push origin main
|
二、关键实现细节
数据库变更检测
通过SHA256哈希算法比对当日与上次备份的数据库内容差异,避免重复备份未变化数据。相比时间戳检测,哈希校验能精准识别内容变更。
备份范围控制
• 数据库:使用mysqldump
导出完整SQL文件
• 网站代码:打包WordPress安装目录(通常为/var/www/html)
- 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 2 3 4 5
| 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
|
- 定时任务配置
通过crontab设置每日4点执行:
1
| echo "0 4 * * * /bin/bash /path/to/backup_script.sh" | crontab -
|
- 权限配置
在/etc/sudoers
添加:
1
| www-data ALL=(ALL) NOPASSWD: /usr/bin/mysqldump
|
四、增强方案建议
- 备份加密
使用GPG加密敏感数据:
1
| gpg --batch --yes --passphrase "YOUR_PASSPHRASE" -c $DB_FILE
|
- 异常通知
添加邮件通知功能:
1 2 3
| if [ $? -ne 0 ]; then echo "备份失败" | mail -s "WordPress备份警报" admin@example.com fi
|
- 云存储冗余
可结合云厂商CLI工具实现多地存储:
1 2
| coscmd upload "${BACKUP_DIR}/web_*.tar.gz" /
|
五、注意事项
- 确保MySQL用户具有
SELECT, LOCK TABLES
权限
- Git仓库建议使用LFS管理大文件
- 定期测试备份恢复流程(建议每月一次)
- 备份目录权限设置为700防止未授权访问
该方案结合了数据库哈希校验、Git版本控制等技术,在保证备份可靠性的同时实现最小化存储消耗。可根据实际服务器配置调整备份策略,例如使用--hex-blob
参数处理二进制字段,或添加--skip-lock-tables
参数避免锁表影响网站运行。