大概4月25日那天给网站加新功能时,手滑改动了functions.php和一堆文件,结果网站突然变成HTTP500错误页面啦qwq!当时慌慌张张翻找最近的备份文件恢复,结果居然还是报错(瞳孔地震)!最后突然想起自己还有全站备份的救命脚本,赶紧用云端备份还原才化险为夷
今天就和大家分享我的双重备份方案(插件什么的才不用呢,要么收费要么卡顿)
🧰双重备份系统架构
安全守则
重要数据请遵循3-2-1原则:至少3份副本,2种存储介质,1份异地备份(当然只要你能保住你的数据就行)
我的方案采用本体+数据库分离备份策略:
- 📁 网站本体:实时压缩打包 → 通过FTP传送到家庭云(全量)
- 🗃️ 数据库:家庭云通过mysqldump远程拉取
🖥️网站本体备份脚本
#!/bin/bash
# 配置部分
BACKUP_SRC="/root/wordpress" #本体路径
FTP_USER="FTP用户"
FTP_PASS="FTP密码"
FTP_HOST="FTP地址"
BACKUP_NAME="wordpress_$(date +%Y%m%d).zip"
# 创建临时目录
temp_dir=$(mktemp -d)
trap 'rm -rf "$temp_dir"' EXIT # 删除临时目录
# 创建压缩包
echo "正在创建压缩包..."
if ! zip -rq "${temp_dir}/${BACKUP_NAME}" "${BACKUP_SRC}"; then
echo "错误: 压缩包创建失败!" >&2
exit 1
fi
echo "压缩包创建成功: ${temp_dir}/${BACKUP_NAME}"
chmod +r "${temp_dir}/${BACKUP_NAME}"
cd ${temp_dir}
# FTP上传
echo "正在上传到FTP服务器..."
ftp -n <<EOF
open $FTP_HOST
user $FTP_USER $FTP_PASS
binary
cd wpBackup
put ${BACKUP_NAME}
bye
EOF
if [ $? -ne 0 ]; then
echo "错误: FTP上传失败!" >&2
exit 1
fi
echo "备份流程完成喵~"
建议提前安装zip和ftp软件包
🗃️数据库热备份方案
# 数据库配置
DB_HOST="数据库地址"
DB_PORT="数据库端口"
DB_USER="数据库用户名"
DB_PASS='数据库密码'
DB_NAME="要备份的数据库名称"
# 备份目录配置
BACKUP_DIR="/home/ftp/ftp_root/wpBackup"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
FILE_NAME="wp_backup_${TIMESTAMP}"
# 创建备份目录(如果不存在)
mkdir -p ${BACKUP_DIR}
# 执行数据库备份并压缩
mysqldump -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} -p"${DB_PASS}" \
--databases ${DB_NAME} | gzip > ${BACKUP_DIR}/${FILE_NAME}.sql.gz
# 输出备份结果
if [ $? -eq 0 ]; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 备份成功:${BACKUP_DIR}/${FILE_NAME}.sql.gz"
else
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 备份失败!"
exit 1
fi
💻紧急恢复指南
恢复三定律
1. 先恢复数据库 2. 再替换文件 3. 最后刷新缓存
完整恢复流程:
- 通过
mysql -u root -p dbname < backup.sql
导入数据库 - 直接替换本体
- 修复文件权限,wp-content请授予775权限
提示:恢复完成后建议使用curl -I检查HTTP状态码,用wp-cli验证核心文件完整性哦~
对啦!记得不定期复习几次全量恢复演练,毕竟备份不能吃灰灰,要确保关键时刻能用才行嗷(≡ω≡)