本章将构建企业级容灾备份系统💪,实现数据库实时备份+文件增量备份,即使服务器毁灭也能5分钟快速恢复🕒
💡 备份策略黄金法则
- 🔥 3-2-1原则:3份备份 → 2种介质 → 1份异地
- ⏱️ RTO≤15分钟:故障到恢复的最长时间
- 🔄 自动验证:每月自动恢复测试
🗂️ 一、本地自动化备份系统
-
1. 数据库定时备份脚本
❏ 复制#!/bin/bash # /usr/local/bin/wp-db-backup.sh DATE=$(date +"%Y%m%d_%H%M") BACKUP_DIR="/backups/db" DB_USER="wp_user" DB_NAME="wordpress" # 创建备份目录 mkdir -p $BACKUP_DIR # 全量备份并压缩 mysqldump -u$DB_USER -p'你的密码' $DB_NAME | gzip > "$BACKUP_DIR/wp_db_$DATE.sql.gz" # 保留最近7天(关键!防止占满磁盘) find $BACKUP_DIR -type f -name "*.gz" -mtime +7 -delete
-
2. 文件系统增量备份
❏ 复制#!/bin/bash # /usr/local/bin/wp-files-backup.sh SOURCE="/var/www/wordpress" BACKUP_DIR="/backups/files" LOG_FILE="/var/log/backup.log" # rsync增量备份(只同步变化文件) rsync -avh --delete --log-file=$LOG_FILE \ --link-dest=$BACKUP_DIR/latest $SOURCE $BACKUP_DIR/backup_$(date +%Y%m%d) # 更新latest软链接 rm -f $BACKUP_DIR/latest ln -s $BACKUP_DIR/backup_$(date +%Y%m%d) $BACKUP_DIR/latest
🔍 原理:通过硬链接节省空间(重复文件不占额外空间)
☁️ 二、云端备份方案
云服务商 | 优势 | 存储成本 | 推荐场景 |
---|---|---|---|
Backblaze B2 | API友好,无限流量 | $0.005/GB/月 | 高频备份 |
Amazon S3 Glacier | 超低成本 | $0.004/GB/月 | 长期归档 |
Google Cloud Storage | 多区域存储 | $0.02/GB/月 | 地理冗余 |
❏ 复制
# Backblaze B2自动上传脚本
# 需先安装:sudo apt install python3-pip && pip3 install b2
#!/bin/bash
B2_ACC_ID="你的账户ID"
B2_APP_KEY="你的应用密钥"
B2_BUCKET="wp-backups"
LOCAL_DIR="/backups"
b2 authorize-account $B2_ACC_ID $B2_APP_KEY
b2 sync --delete $LOCAL_DIR b2://$B2_BUCKET
🛡️ 三、备份加密与监控
-
1. 军事级加密方案
❏ 复制# 加密备份文件(使用AES-256) openssl enc -aes-256-cbc -salt -in backup.tar.gz -out backup.enc \ -pass pass:"你的高强度加密密码"
-
2. 监控系统集成
❏ 复制# /etc/cron.d/backup-monitor MAILTO="admin@yourdomain.com" 30 3 * * * /usr/local/bin/wp-db-backup.sh 2>&1 | mail -s "DB Backup Report" $MAILTO 0 4 * * * /usr/local/bin/wp-files-backup.sh 2>&1 | mail -s "Files Backup Report" $MAILTO
🚑 四、灾难恢复指南
⛑️ 网站完全崩溃后操作流程:
- 拉取最新备份:
b2 download-file-by-name wp-backups /backups/restore.tar.gz
- 解密文件:
openssl enc -d -aes-256-cbc -in restore.tar.gz -out restore.tar -pass pass:"密码"
- 数据库恢复:
gunzip < wp_db_最新日期.sql.gz | mysql -u root -p wordpress
- 文件恢复:
tar xvf restore.tar -C /var/www
- 权限修复:
chown -R www-data:www-data /var/www/wordpress
⏱️ 预计恢复时间:<5分钟(10GB以下网站)
✅ 五、备份完整性验证
❏ 复制
# 自动验证脚本(每月运行)
#!/bin/bash
# 模拟恢复测试数据库
TEST_DB="wp_backup_test_$(date +%s)"
mysql -e "CREATE DATABASE $TEST_DB"
gunzip -c /backups/db/$(ls -t /backups/db | head -1) | mysql $TEST_DB
# 检查表完整性
CHECK_RESULT=$(mysqlcheck -u root -p $TEST_DB | grep "OK")
if [[ $CHECK_RESULT == *"OK"* ]]; then
echo "✅ Database backup verified" | mail -s "Backup VALID" admin@yourdomain.com
else
echo "🚨 Database backup corrupted" | mail -s "Backup INVALID" admin@yourdomain.com
fi
# 清理测试库
mysql -e "DROP DATABASE $TEST_DB"
🚫 避坑指南:备份系统失败场景
- 💥 存储空间不足 → 配置自动清理
- 💥 权限错误 → 使用www-data用户执行脚本
- 💥 网络超时 → 设置超时重试机制
- 💥 加密密钥丢失 → 密钥存入1Password保险库
- 💥 备份成为单点故障 → 采用多地冗余存储
文章评论