WuYongJie 5821d73291 初始提交:3D家具安装展示系统
包含:
- furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画)
- autocad-plugin:AutoCAD 家具导出插件源码
- 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 14:00:19 +08:00

102 lines
3.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================
# 系统恢复脚本 (Linux/Mac)
# ============================================
# 功能:
# - 从指定的完整备份目录恢复数据库和文件存储
# - 恢复前先执行一次完整备份作为 "before-restore" 快照
# 使用:
# ./scripts/restore.sh <完整备份目录>
# 示例:
# ./scripts/restore.sh ./backups/full/20251218-120000
# ============================================
set -e
if [ -z "$1" ]; then
echo "用法: $0 <完整备份目录>"
exit 1
fi
BACKUP_DIR="$1"
DB_BACKUP_DIR="${BACKUP_DIR}/database"
FILES_BACKUP_DIR="${BACKUP_DIR}/files"
if [ ! -d "$DB_BACKUP_DIR" ] || [ ! -d "$FILES_BACKUP_DIR" ]; then
echo "错误:${BACKUP_DIR} 下未找到 database/ 或 files/ 子目录。"
exit 1
fi
echo "========================================"
echo " 系统恢复脚本"
echo "========================================"
echo "目标备份目录: ${BACKUP_DIR}"
echo "警告:该操作会覆盖当前数据库和文件存储,请确保在测试环境中执行。"
echo "========================================"
read -p "确认继续恢复?(yes/[no]): " CONFIRM
if [ "$CONFIRM" != "yes" ]; then
echo "已取消恢复操作。"
exit 0
fi
# 0. 恢复前先做一次完整备份
echo "\n[步骤 0] 恢复前备份当前系统..."
./scripts/backup-all.sh "./backups/before-restore" || echo "恢复前备份失败(已记录),继续尝试恢复..."
# 1. 恢复数据库
echo "\n[步骤 1] 恢复数据库..."
# 加载当前 .env 中的 DATABASE_URL
if [ -f .env ]; then
export $(cat .env | grep -v '^#' | xargs)
fi
if [ -z "$DATABASE_URL" ]; then
echo "错误:未在当前环境或 .env 中找到 DATABASE_URL,无法恢复数据库。"
exit 1
fi
LATEST_DB_BACKUP="$(ls -1 "${DB_BACKUP_DIR}"/db-backup-*.sql.gz 2>/dev/null | head -n 1)"
if [ -z "$LATEST_DB_BACKUP" ]; then
echo "错误:在 ${DB_BACKUP_DIR} 下未找到 db-backup-*.sql.gz 文件。"
exit 1
fi
echo "使用备份文件: ${LATEST_DB_BACKUP}"
gunzip -c "$LATEST_DB_BACKUP" | psql "$DATABASE_URL"
echo "数据库恢复完成。"
# 2. 恢复文件存储 (MinIO)
echo "\n[步骤 2] 恢复文件存储 (MinIO)..."
LATEST_FILES_BACKUP="$(ls -1 "${FILES_BACKUP_DIR}"/files-backup-*.tar.gz 2>/dev/null | head -n 1)"
if [ -z "$LATEST_FILES_BACKUP" ]; then
echo "错误:在 ${FILES_BACKUP_DIR} 下未找到 files-backup-*.tar.gz 文件。"
exit 1
fi
echo "使用备份文件: ${LATEST_FILES_BACKUP}"
# 目标 MinIO 数据目录(与备份脚本使用的默认值一致)
MINIO_DATA_DIR="${MINIO_DATA_DIR:-./minio-data}"
mkdir -p "$MINIO_DATA_DIR"
echo "清空当前 MinIO 数据目录: ${MINIO_DATA_DIR}"
rm -rf "${MINIO_DATA_DIR:?}"/*
tar -xzf "$LATEST_FILES_BACKUP" -C "$(dirname "$MINIO_DATA_DIR")"
echo "文件存储恢复完成。"
echo "\n========================================"
echo " 🎉 系统恢复完成 (基础版本)"
echo "========================================"
echo "来源备份: ${BACKUP_DIR}"
echo "恢复前快照目录: ./backups/before-restore"
echo "========================================"
echo ""