chitfund/old_docs_backup_20251105_20.../restore-database.sh

118 lines
2.8 KiB
Bash

#!/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