#!/bin/bash # Document Server 데이터베이스 복원 스크립트 # 시놀로지 NAS 환경에서 사용 if [ $# -eq 0 ]; then echo "사용법: $0 <백업파일명>" echo "예시: $0 document_db_20241201_143000.sql.gz" exit 1 fi BACKUP_FILE="$1" BACKUP_DIR="/volume1/docker/document-server/backups" CONTAINER_NAME="document-server-db" if [ ! -f "$BACKUP_DIR/$BACKUP_FILE" ]; then echo "❌ 백업 파일을 찾을 수 없습니다: $BACKUP_DIR/$BACKUP_FILE" exit 1 fi echo "⚠️ 주의: 현재 데이터베이스의 모든 데이터가 삭제됩니다!" read -p "계속하시겠습니까? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "복원이 취소되었습니다." exit 1 fi echo "🔄 데이터베이스 복원 시작..." # 압축 해제 (필요한 경우) if [[ $BACKUP_FILE == *.gz ]]; then echo "📦 백업 파일 압축 해제 중..." gunzip -c "$BACKUP_DIR/$BACKUP_FILE" > "/tmp/restore_temp.sql" SQL_FILE="/tmp/restore_temp.sql" else SQL_FILE="$BACKUP_DIR/$BACKUP_FILE" fi # 기존 데이터베이스 삭제 및 재생성 echo "🗑️ 기존 데이터베이스 삭제 중..." docker exec $CONTAINER_NAME psql -U docuser -d postgres -c "DROP DATABASE IF EXISTS document_db;" docker exec $CONTAINER_NAME psql -U docuser -d postgres -c "CREATE DATABASE document_db;" # 백업 복원 echo "📥 데이터베이스 복원 중..." docker exec -i $CONTAINER_NAME psql -U docuser -d document_db < "$SQL_FILE" # 임시 파일 정리 if [ -f "/tmp/restore_temp.sql" ]; then rm "/tmp/restore_temp.sql" fi echo "✅ 데이터베이스 복원 완료" echo "🔄 백엔드 서비스 재시작 중..." docker restart document-server-backend echo "🎉 복원 작업 완료"