generated from theradcoza/Laravel-Docker-Dev-Template
102 lines
2.7 KiB
Bash
102 lines
2.7 KiB
Bash
#!/bin/bash
|
|
|
|
# Database Restore Script
|
|
# Usage: ./scripts/restore.sh <backup_file>
|
|
# Example: ./scripts/restore.sh backups/laravel_20240306_120000.sql.gz
|
|
|
|
set -e
|
|
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: ./scripts/restore.sh <backup_file>"
|
|
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'"
|