#!/usr/bin/env python3 """ 백업 DB 복원 스크립트 - 백업 파일에서 운영 DB로 복원 실행: python3 scripts/restore_backup.py """ import os import shutil import glob from datetime import datetime DB_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'database') DB_PATH = os.path.join(DB_DIR, 'kdrug.db') def list_backups(): """사용 가능한 백업 파일 목록""" pattern = os.path.join(DB_DIR, 'kdrug_backup*.db') backups = sorted(glob.glob(pattern), key=os.path.getmtime, reverse=True) return backups def restore(): backups = list_backups() if not backups: print("사용 가능한 백업 파일이 없습니다.") return print("=" * 50) print("사용 가능한 백업 파일") print("=" * 50) for i, path in enumerate(backups): size_mb = os.path.getsize(path) / (1024 * 1024) mtime = datetime.fromtimestamp(os.path.getmtime(path)).strftime('%Y-%m-%d %H:%M:%S') name = os.path.basename(path) print(f" [{i + 1}] {name} ({size_mb:.1f}MB, {mtime})") print() choice = input(f"복원할 백업 번호를 선택하세요 (1-{len(backups)}): ").strip() try: idx = int(choice) - 1 if idx < 0 or idx >= len(backups): print("잘못된 번호입니다.") return except ValueError: print("숫자를 입력하세요.") return selected = backups[idx] print() print(f"선택: {os.path.basename(selected)}") confirm = input("현재 DB를 덮어쓰고 복원합니다. 계속하시겠습니까? (yes/no): ").strip().lower() if confirm != 'yes': print("취소되었습니다.") return # 현재 DB를 복원 전 백업 pre_restore = os.path.join(DB_DIR, f"kdrug_pre_restore_{datetime.now().strftime('%Y%m%d_%H%M%S')}.db") shutil.copy2(DB_PATH, pre_restore) print(f" 복원 전 현재 DB 백업 → {os.path.basename(pre_restore)}") # 복원 shutil.copy2(selected, DB_PATH) print(f" {os.path.basename(selected)} → kdrug.db 복원 완료") print() print("복원 완료! 앱을 재시작하세요.") if __name__ == '__main__': restore()