#!/bin/bash # Database Restore Script # Usage: ./scripts/restore.sh # Example: ./scripts/restore.sh backups/laravel_20240306_120000.sql.gz set -e if [ -z "$1" ]; then echo "Usage: ./scripts/restore.sh " echo "" echo "Available backups:" ls -lht backups/*.gz 2>/dev/null || echo " No backups found" exit 1 fi BACKUP_FILE="$1" if [ ! -f "$BACKUP_FILE" ]; then echo "Error: Backup file not found: $BACKUP_FILE" exit 1 fi # Detect database type from .env if [ -f "src/.env" ]; then DB_CONNECTION=$(grep "^DB_CONNECTION=" src/.env | cut -d '=' -f2) DB_DATABASE=$(grep "^DB_DATABASE=" src/.env | cut -d '=' -f2) DB_USERNAME=$(grep "^DB_USERNAME=" src/.env | cut -d '=' -f2) DB_PASSWORD=$(grep "^DB_PASSWORD=" src/.env | cut -d '=' -f2) else echo "Error: src/.env not found" exit 1 fi echo "==========================================" echo "Database Restore" echo "==========================================" echo "Connection: $DB_CONNECTION" echo "Database: $DB_DATABASE" echo "File: $BACKUP_FILE" echo "" read -p "⚠️ This will OVERWRITE the current database. Continue? [y/N]: " CONFIRM if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then echo "Restore cancelled." exit 0 fi # Decompress if needed if [[ "$BACKUP_FILE" == *.gz ]]; then echo "Decompressing backup..." TEMP_FILE=$(mktemp) gunzip -c "$BACKUP_FILE" > "$TEMP_FILE" RESTORE_FILE="$TEMP_FILE" else RESTORE_FILE="$BACKUP_FILE" fi case "$DB_CONNECTION" in mysql) echo "Restoring MySQL database..." docker-compose exec -T mysql mysql \ -u"$DB_USERNAME" \ -p"$DB_PASSWORD" \ "$DB_DATABASE" < "$RESTORE_FILE" ;; pgsql) echo "Restoring PostgreSQL database..." # Drop and recreate database docker-compose exec -T pgsql psql \ -U "$DB_USERNAME" \ -c "DROP DATABASE IF EXISTS $DB_DATABASE;" docker-compose exec -T pgsql psql \ -U "$DB_USERNAME" \ -c "CREATE DATABASE $DB_DATABASE;" docker-compose exec -T pgsql psql \ -U "$DB_USERNAME" \ -d "$DB_DATABASE" < "$RESTORE_FILE" ;; sqlite) echo "Restoring SQLite database..." cp "$RESTORE_FILE" "src/database/database.sqlite" chmod 666 "src/database/database.sqlite" ;; *) echo "Error: Unknown database connection: $DB_CONNECTION" exit 1 ;; esac # Cleanup temp file if [ -n "$TEMP_FILE" ] && [ -f "$TEMP_FILE" ]; then rm "$TEMP_FILE" fi echo "" echo "✓ Database restored successfully!" echo "" echo "You may want to run:" echo " make artisan cmd='cache:clear'" echo " make artisan cmd='config:clear'"