工具: 添加数据恢复脚本
功能: - 自动查找更新时的备份目录 - 显示备份内容和大小 - 恢复数据库、用户文件、配置文件 - 如无备份,提供重新初始化选项 - 自动停止和重启服务 使用场景: - 更新脚本导致数据丢失时恢复 - 误删数据后恢复 - 从备份恢复系统 使用方法: curl -fsSL https://gitee.com/yu-yon/vue-driven-cloud-storage/raw/master/restore-data.sh | sudo bash 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
175
restore-data.sh
Normal file
175
restore-data.sh
Normal file
@@ -0,0 +1,175 @@
|
||||
#!/bin/bash
|
||||
|
||||
################################################################################
|
||||
# 玩玩云 - 数据恢复脚本
|
||||
# 用于恢复更新时丢失的数据
|
||||
################################################################################
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
PROJECT_NAME="wanwanyun"
|
||||
PROJECT_DIR="/var/www/${PROJECT_NAME}"
|
||||
|
||||
echo -e "${RED}╔═══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${RED}║ 玩玩云 - 数据恢复脚本 ║${NC}"
|
||||
echo -e "${RED}╚═══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
|
||||
# 检查root权限
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo -e "${RED}✗ 此脚本需要root权限运行${NC}"
|
||||
echo -e "${YELLOW}请使用: sudo bash restore-data.sh${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}步骤1: 查找备份目录...${NC}"
|
||||
echo ""
|
||||
|
||||
# 查找所有可能的备份目录
|
||||
BACKUP_DIRS=$(find /tmp -maxdepth 1 -type d -name "${PROJECT_NAME}-update-backup-*" 2>/dev/null | sort -r)
|
||||
|
||||
if [[ -z "$BACKUP_DIRS" ]]; then
|
||||
echo -e "${YELLOW}⚠ 未找到自动备份目录${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}步骤2: 查找其他可能的备份...${NC}"
|
||||
|
||||
# 检查 /root 目录下的备份
|
||||
ROOT_BACKUPS=$(find /root -maxdepth 1 -type d -name "${PROJECT_NAME}-backup-*" 2>/dev/null | sort -r)
|
||||
|
||||
if [[ -z "$ROOT_BACKUPS" ]]; then
|
||||
echo -e "${RED}✗ 未找到任何备份${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}如果您没有其他备份,需要重新初始化数据库${NC}"
|
||||
echo ""
|
||||
|
||||
read -p "是否重新创建管理员账号?(y/n): " create_new < /dev/tty
|
||||
|
||||
if [[ "$create_new" == "y" || "$create_new" == "Y" ]]; then
|
||||
# 停止服务
|
||||
pm2 stop ${PROJECT_NAME}-backend
|
||||
|
||||
# 删除旧数据库
|
||||
rm -f "${PROJECT_DIR}/backend/data/ftp-manager.db"
|
||||
|
||||
# 重启服务(会自动创建新数据库)
|
||||
pm2 restart ${PROJECT_NAME}-backend
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}✓ 已重新初始化数据库${NC}"
|
||||
echo -e "${YELLOW}默认管理员账号: admin${NC}"
|
||||
echo -e "${YELLOW}默认密码: admin123${NC}"
|
||||
echo -e "${RED}⚠️ 请立即登录并修改密码!${NC}"
|
||||
fi
|
||||
exit 0
|
||||
else
|
||||
echo -e "${GREEN}✓ 找到卸载时的备份:${NC}"
|
||||
echo "$ROOT_BACKUPS"
|
||||
BACKUP_DIRS="$ROOT_BACKUPS"
|
||||
fi
|
||||
else
|
||||
echo -e "${GREEN}✓ 找到以下备份目录:${NC}"
|
||||
echo "$BACKUP_DIRS"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 选择最新的备份
|
||||
LATEST_BACKUP=$(echo "$BACKUP_DIRS" | head -1)
|
||||
echo -e "${BLUE}使用最新备份: $LATEST_BACKUP${NC}"
|
||||
echo ""
|
||||
|
||||
# 显示备份内容
|
||||
echo -e "${BLUE}步骤3: 检查备份内容...${NC}"
|
||||
echo ""
|
||||
|
||||
if [[ -d "$LATEST_BACKUP/data" ]]; then
|
||||
DATA_SIZE=$(du -sh "$LATEST_BACKUP/data" 2>/dev/null | cut -f1)
|
||||
echo -e "${GREEN}✓ 数据库目录: $DATA_SIZE${NC}"
|
||||
HAS_DATA=true
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 未找到数据库备份${NC}"
|
||||
HAS_DATA=false
|
||||
fi
|
||||
|
||||
if [[ -d "$LATEST_BACKUP/storage" ]]; then
|
||||
STORAGE_SIZE=$(du -sh "$LATEST_BACKUP/storage" 2>/dev/null | cut -f1)
|
||||
echo -e "${GREEN}✓ 用户文件目录: $STORAGE_SIZE${NC}"
|
||||
HAS_STORAGE=true
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 未找到用户文件备份${NC}"
|
||||
HAS_STORAGE=false
|
||||
fi
|
||||
|
||||
if [[ -f "$LATEST_BACKUP/.env" ]]; then
|
||||
echo -e "${GREEN}✓ 配置文件${NC}"
|
||||
HAS_ENV=true
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 未找到配置文件备份${NC}"
|
||||
HAS_ENV=false
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
if [[ "$HAS_DATA" == false ]] && [[ "$HAS_STORAGE" == false ]] && [[ "$HAS_ENV" == false ]]; then
|
||||
echo -e "${RED}✗ 备份目录为空,无法恢复${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 确认恢复
|
||||
echo -e "${YELLOW}是否恢复以上备份?${NC}"
|
||||
read -p "确认恢复 (y/n): " confirm < /dev/tty
|
||||
|
||||
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
|
||||
echo -e "${BLUE}已取消恢复${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}步骤4: 停止服务...${NC}"
|
||||
pm2 stop ${PROJECT_NAME}-backend
|
||||
echo -e "${GREEN}✓ 服务已停止${NC}"
|
||||
echo ""
|
||||
|
||||
echo -e "${BLUE}步骤5: 恢复数据...${NC}"
|
||||
|
||||
# 恢复数据库
|
||||
if [[ "$HAS_DATA" == true ]]; then
|
||||
rm -rf "${PROJECT_DIR}/backend/data"
|
||||
cp -r "$LATEST_BACKUP/data" "${PROJECT_DIR}/backend/"
|
||||
echo -e "${GREEN}✓ 数据库已恢复${NC}"
|
||||
fi
|
||||
|
||||
# 恢复用户文件
|
||||
if [[ "$HAS_STORAGE" == true ]]; then
|
||||
rm -rf "${PROJECT_DIR}/backend/storage"
|
||||
cp -r "$LATEST_BACKUP/storage" "${PROJECT_DIR}/backend/"
|
||||
echo -e "${GREEN}✓ 用户文件已恢复${NC}"
|
||||
fi
|
||||
|
||||
# 恢复配置文件
|
||||
if [[ "$HAS_ENV" == true ]]; then
|
||||
cp "$LATEST_BACKUP/.env" "${PROJECT_DIR}/backend/"
|
||||
echo -e "${GREEN}✓ 配置文件已恢复${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}步骤6: 重启服务...${NC}"
|
||||
pm2 restart ${PROJECT_NAME}-backend
|
||||
sleep 2
|
||||
pm2 save
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${GREEN}║ ✓ 数据恢复完成! ║${NC}"
|
||||
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
|
||||
echo -e "${YELLOW}请登录系统验证数据是否完整${NC}"
|
||||
echo ""
|
||||
|
||||
# 显示服务状态
|
||||
pm2 status
|
||||
Reference in New Issue
Block a user