generated from theradcoza/Laravel-Docker-Dev-Template
Initial commit
This commit is contained in:
85
scripts/backup.sh
Normal file
85
scripts/backup.sh
Normal file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Database Backup Script
|
||||
# Usage: ./scripts/backup.sh
|
||||
# Creates timestamped backup in backups/ directory
|
||||
|
||||
set -e
|
||||
|
||||
BACKUP_DIR="backups"
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
# Create backup directory
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# 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 Backup"
|
||||
echo "=========================================="
|
||||
echo "Connection: $DB_CONNECTION"
|
||||
echo "Database: $DB_DATABASE"
|
||||
echo ""
|
||||
|
||||
case "$DB_CONNECTION" in
|
||||
mysql)
|
||||
BACKUP_FILE="$BACKUP_DIR/${DB_DATABASE}_${TIMESTAMP}.sql"
|
||||
echo "Creating MySQL backup..."
|
||||
docker-compose exec -T mysql mysqldump \
|
||||
-u"$DB_USERNAME" \
|
||||
-p"$DB_PASSWORD" \
|
||||
"$DB_DATABASE" > "$BACKUP_FILE"
|
||||
;;
|
||||
pgsql)
|
||||
BACKUP_FILE="$BACKUP_DIR/${DB_DATABASE}_${TIMESTAMP}.sql"
|
||||
echo "Creating PostgreSQL backup..."
|
||||
docker-compose exec -T pgsql pg_dump \
|
||||
-U "$DB_USERNAME" \
|
||||
"$DB_DATABASE" > "$BACKUP_FILE"
|
||||
;;
|
||||
sqlite)
|
||||
BACKUP_FILE="$BACKUP_DIR/${DB_DATABASE}_${TIMESTAMP}.sqlite"
|
||||
echo "Creating SQLite backup..."
|
||||
cp "src/database/database.sqlite" "$BACKUP_FILE"
|
||||
;;
|
||||
*)
|
||||
echo "Error: Unknown database connection: $DB_CONNECTION"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Compress backup
|
||||
if [ -f "$BACKUP_FILE" ]; then
|
||||
gzip "$BACKUP_FILE"
|
||||
BACKUP_FILE="${BACKUP_FILE}.gz"
|
||||
|
||||
# Get file size
|
||||
SIZE=$(ls -lh "$BACKUP_FILE" | awk '{print $5}')
|
||||
|
||||
echo ""
|
||||
echo "✓ Backup created successfully!"
|
||||
echo " File: $BACKUP_FILE"
|
||||
echo " Size: $SIZE"
|
||||
echo ""
|
||||
|
||||
# Cleanup old backups (keep last 10)
|
||||
echo "Cleaning up old backups (keeping last 10)..."
|
||||
ls -t "$BACKUP_DIR"/*.gz 2>/dev/null | tail -n +11 | xargs -r rm --
|
||||
|
||||
# List recent backups
|
||||
echo ""
|
||||
echo "Recent backups:"
|
||||
ls -lht "$BACKUP_DIR"/*.gz 2>/dev/null | head -5
|
||||
else
|
||||
echo "Error: Backup file not created"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user