86 lines
2.3 KiB
Bash
86 lines
2.3 KiB
Bash
#!/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
|