templave v1
This commit is contained in:
101
scripts/restore.sh
Normal file
101
scripts/restore.sh
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/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'"
|
||||
Reference in New Issue
Block a user