工具: 添加数据恢复脚本

功能:
- 自动查找更新时的备份目录
- 显示备份内容和大小
- 恢复数据库、用户文件、配置文件
- 如无备份,提供重新初始化选项
- 自动停止和重启服务

使用场景:
- 更新脚本导致数据丢失时恢复
- 误删数据后恢复
- 从备份恢复系统

使用方法:
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:
WanWanYun
2025-11-11 01:08:19 +08:00
parent 27f130388a
commit b13ae7d0dd

175
restore-data.sh Normal file
View 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