#!/bin/bash # CodiMD 還原腳本 set -e BACKUP_DIR="./backups" echo "🔄 CodiMD 還原腳本" echo "" # 列出可用的備份 if [ ! -d "$BACKUP_DIR" ] || [ -z "$(ls -A $BACKUP_DIR/*.sql 2>/dev/null)" ]; then echo "❌ 找不到備份檔案" exit 1 fi echo "📂 可用的備份:" ls -lht "$BACKUP_DIR"/*.sql 2>/dev/null | head -10 echo "" # 詢問要還原的備份 read -p "請輸入要還原的備份檔案名稱 (例如: database_20260317_120000.sql): " BACKUP_FILE if [ ! -f "$BACKUP_DIR/$BACKUP_FILE" ]; then echo "❌ 找不到檔案: $BACKUP_DIR/$BACKUP_FILE" exit 1 fi # 提取時間戳記 TIMESTAMP=$(echo "$BACKUP_FILE" | sed 's/database_\(.*\).sql/\1/') echo "" echo "⚠️ 警告:還原資料庫會覆蓋現有資料!" read -p "確定要還原嗎?(yes/no): " CONFIRM if [ "$CONFIRM" != "yes" ]; then echo "❌ 取消還原" exit 0 fi echo "" echo "🔄 開始還原..." # 1. 還原資料庫 echo "📦 還原資料庫..." docker-compose exec -T database psql -U codimd codimd < "$BACKUP_DIR/$BACKUP_FILE" if [ $? -eq 0 ]; then echo "✅ 資料庫還原完成" else echo "❌ 資料庫還原失敗" exit 1 fi # 2. 詢問是否還原上傳檔案 UPLOAD_FILE="$BACKUP_DIR/uploads_$TIMESTAMP.tar.gz" if [ -f "$UPLOAD_FILE" ]; then read -p "是否還原上傳檔案?(yes/no): " RESTORE_UPLOAD if [ "$RESTORE_UPLOAD" = "yes" ]; then echo "📁 還原上傳檔案..." rm -rf upload-data/* tar -xzf "$UPLOAD_FILE" echo "✅ 上傳檔案還原完成" fi fi # 3. 詢問是否還原環境設定 ENV_FILE="$BACKUP_DIR/env_$TIMESTAMP.env" if [ -f "$ENV_FILE" ]; then read -p "是否還原環境設定?(yes/no): " RESTORE_ENV if [ "$RESTORE_ENV" = "yes" ]; then echo "📝 還原環境設定..." cp "$ENV_FILE" .env echo "✅ 環境設定還原完成" echo "⚠️ 請執行 ./restart.sh 以套用新設定" fi fi echo "" echo "✅ 還原完成!"