#!/bin/bash # LuckyChit Database Restore Script # Restores PostgreSQL database from a backup file set -e # Configuration DB_NAME="luckychit" DB_USER="luckychit" DB_HOST="localhost" BACKUP_DIR="/home/luckychit/backups" echo "πŸ—„οΈ LuckyChit Database Restore" echo "==============================" echo "" # Check if backup directory exists if [ ! -d "$BACKUP_DIR" ]; then echo "❌ Backup directory not found: $BACKUP_DIR" exit 1 fi # List available backups echo "πŸ“¦ Available backups:" echo "" ls -lh "$BACKUP_DIR"/luckychit_backup_*.sql.gz 2>/dev/null | nl || { echo "❌ No backup files found in $BACKUP_DIR" exit 1 } echo "" echo "Enter the filename to restore (without path):" read -r BACKUP_FILENAME BACKUP_FILE="$BACKUP_DIR/$BACKUP_FILENAME" # Check if file exists if [ ! -f "$BACKUP_FILE" ]; then echo "❌ Backup file not found: $BACKUP_FILE" exit 1 fi echo "" echo "⚠️ WARNING: This will REPLACE the current database!" echo "Database: $DB_NAME" echo "Backup file: $BACKUP_FILE" echo "" echo "Are you sure you want to continue? (yes/no)" read -r CONFIRM if [ "$CONFIRM" != "yes" ]; then echo "❌ Restore cancelled" exit 0 fi # Create a safety backup before restore SAFETY_BACKUP="$BACKUP_DIR/before_restore_$(date +%Y%m%d_%H%M%S).sql" echo "" echo "πŸ“¦ Creating safety backup first..." pg_dump -U "$DB_USER" -h "$DB_HOST" "$DB_NAME" > "$SAFETY_BACKUP" echo "βœ… Safety backup created: $SAFETY_BACKUP" # Decompress if needed if [[ "$BACKUP_FILE" == *.gz ]]; then echo "" echo "πŸ—œοΈ Decompressing backup..." DECOMPRESSED_FILE="${BACKUP_FILE%.gz}" gunzip -c "$BACKUP_FILE" > "$DECOMPRESSED_FILE" BACKUP_FILE="$DECOMPRESSED_FILE" echo "βœ… Decompressed to: $BACKUP_FILE" fi # Stop PM2 processes echo "" echo "⏸️ Stopping PM2 processes..." pm2 stop luckychit-api 2>/dev/null || true # Drop and recreate database echo "" echo "πŸ—‘οΈ Dropping existing database..." dropdb -U "$DB_USER" -h "$DB_HOST" --if-exists "$DB_NAME" echo "πŸ†• Creating fresh database..." createdb -U "$DB_USER" -h "$DB_HOST" "$DB_NAME" # Restore backup echo "" echo "πŸ“₯ Restoring backup..." psql -U "$DB_USER" -h "$DB_HOST" "$DB_NAME" < "$BACKUP_FILE" if [ $? -eq 0 ]; then echo "" echo "βœ… Database restore completed successfully!" # Clean up decompressed file if we created it if [[ "$BACKUP_FILENAME" == *.gz ]]; then rm -f "$BACKUP_FILE" fi # Restart PM2 echo "" echo "▢️ Restarting PM2 processes..." pm2 restart luckychit-api pm2 status echo "" echo "βœ… Restore process completed successfully!" echo "πŸ“ Safety backup available at: $SAFETY_BACKUP" else echo "" echo "❌ Restore failed!" echo "πŸ“ Safety backup available at: $SAFETY_BACKUP" exit 1 fi