恢复过程通常是备份过程的逆向操作,主要也分为数据库恢复和网站文件恢复两大部分。

/opt/wordpress_backup/files-2025-06-05.tar.gz
(网站文件)
数据库备份,例如:/opt/wordpress_backup/db-2025-06-05.sql
#-x:表示“解包”,英文是 extract
#-z:表示“解压缩”,因为这个 .tar.gz 文件是 gzip 压缩过的
#-f:表示“后面跟的是文件名”,必须紧跟文件路径
#-C /:表示“解压到 / 这个目录下”,也就是按照打包时的路径,还原回系统中原来的位置(比如 /var/www/html)
tar -xzf /opt/wordpress_backup/files-2025-06-05.tar.gz -C /
mysql -uzhangsan -pabc123 wordpress < /opt/wordpress_backup/db-2025-06-05.sql
sudo nano /opt/restore_wordpress.sh
脚本内容如下:
#!/bin/bash
# ===================================================
# WordPress 站点恢复脚本(带交互提示和详细中文注释)
# 使用者:zhangsan 用户,LNMP 环境
# ===================================================
# === 基础设置 ===
# 网站目录(WordPress 安装位置)
WEB_DIR="/var/www/html"
# 数据库配置
DB_NAME="wordpress" # 数据库名
DB_USER="zhangsan" # 数据库用户
DB_PASS="abc123"
# 备份文件所在目录
BACKUP_DIR="/opt/wordpress_backup"
# 终止脚本时,如有错误,自动退出
set -e
# === 开始交互 ===
echo "========== WordPress 备份恢复工具 =========="
echo "备份目录:$BACKUP_DIR"
echo "当前时间:$(date)"
echo
# === 第一步:列出所有可用的备份日期 ===
echo "可用的备份文件如下:"
# 只提取文件中的日期部分,例如 files-2025-06-05.tar.gz => 2025-06-05
ls $BACKUP_DIR/files-*.tar.gz | sed 's/.*files-\(.*\).tar.gz/\1/' | sort
echo
# 读取用户要恢复的日期
read -p "请输入要恢复的备份日期(例如 2025-06-05): " BACKUP_DATE
# 组合完整路径
FILE_BACKUP="$BACKUP_DIR/files-$BACKUP_DATE.tar.gz"
DB_BACKUP="$BACKUP_DIR/db-$BACKUP_DATE.sql"
# === 第二步:检查备份文件是否存在 ===
if [[ ! -f "$FILE_BACKUP" || ! -f "$DB_BACKUP" ]]; then
echo "❌ 找不到该日期的备份文件,请确认输入正确。"
exit 1
fi
# === 第三步:二次确认 ===
echo
echo "⚠️ 警告:这将覆盖现有的网站文件和数据库数据!"
read -p "你确定要恢复到 $BACKUP_DATE 的状态吗?(yes/no): " CONFIRM
if [[ "$CONFIRM" != "yes" ]]; then
echo "操作已取消。"
exit 0
fi
# === 第四步:恢复网站文件 ===
echo
echo "开始恢复网站文件..."
# 解压 tar 文件
# 参数解释:
# -x :解压模式(extract)
# -z :使用 gzip 解压(.tar.gz)
# -f :后面跟的是文件名
# -C / :解压到系统根目录(恢复到原始路径)
# --overwrite :强制覆盖已有文件(不提示)
tar -xzf "$FILE_BACKUP" -C / --overwrite
echo "✅ 网站文件恢复完成。"
# === 第五步:恢复数据库 ===
echo
echo "开始恢复数据库..."
# 检查数据库是否存在
DB_EXIST=$(mysql -u"$DB_USER" -p"$DB_PASS" -e "SHOW DATABASES LIKE '$DB_NAME';" | grep "$DB_NAME" || true)
if [[ -z "$DB_EXIST" ]]; then
echo "🔍 数据库 $DB_NAME 不存在,正在创建..."
mysql -u"$DB_USER" -p"$DB_PASS" -e "CREATE DATABASE $DB_NAME DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
echo "✅ 数据库创建完成。"
fi
# 导入 SQL 文件
mysql -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" < "$DB_BACKUP"
echo "✅ 数据库恢复完成。"
# === 第六步:完成提示 ===
echo
echo "🎉 恢复成功!你的网站已恢复到【$BACKUP_DATE】的状态。"
chmod +x /opt/restore_wordpress.sh
/opt/restore_wordpress.sh
声明:本文为原创文章,版权归深谋之道所有,欢迎分享本文,转载请保留出处!