Files
pos-system/scripts/db/backup.sh
Ho Ngoc Hai 4da46b5b8e Sure! Pl
2025-12-27 01:31:10 +07:00

62 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
set -e
SERVICE=$1
BACKUP_DIR="${2:-./backups}"
if [ -z "$SERVICE" ]; then
echo "Usage: $0 <service-name> [backup-dir]"
echo "Example: $0 auth-service"
exit 1
fi
mkdir -p "$BACKUP_DIR"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/${SERVICE}_${TIMESTAMP}.sql"
echo "💾 Backing up database for $SERVICE..."
# Extract database URL from .env or environment
cd "services/$SERVICE"
if [ -z "$DATABASE_URL" ]; then
if [ -f ".env" ]; then
DATABASE_URL=$(grep DATABASE_URL .env | cut -d '=' -f2- | tr -d '"' | tr -d "'")
elif [ -f "../../deployments/local/.env.local" ]; then
DATABASE_URL=$(grep DATABASE_URL ../../deployments/local/.env.local | cut -d '=' -f2- | tr -d '"' | tr -d "'")
fi
fi
if [ -z "$DATABASE_URL" ]; then
echo "❌ DATABASE_URL not found. Please set it in:"
echo " - services/$SERVICE/.env"
echo " - deployments/local/.env.local"
echo " - Or as environment variable"
exit 1
fi
# Use pg_dump directly with DATABASE_URL (works with Neon and standard PostgreSQL)
# Neon URLs format: postgresql://user:pass@ep-xxx.region.neon.tech/dbname?sslmode=require
# Standard format: postgresql://user:pass@host:port/dbname
# Check if pg_dump supports connection string (PostgreSQL 11+)
if pg_dump --version | grep -qE "1[1-9]|2[0-9]"; then
# Use connection string directly (supports Neon)
pg_dump "$DATABASE_URL" > "../$BACKUP_FILE"
else
# Fallback: Parse connection string for older pg_dump
# Remove query parameters for parsing
CLEAN_URL=$(echo $DATABASE_URL | sed 's/?.*//')
DB_USER=$(echo $CLEAN_URL | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p')
DB_PASS=$(echo $CLEAN_URL | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p')
DB_HOST=$(echo $CLEAN_URL | sed -n 's/.*@\([^:]*\):.*/\1/p')
DB_PORT=$(echo $CLEAN_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p')
DB_NAME=$(echo $CLEAN_URL | sed -n 's/.*\/\([^?]*\).*/\1/p')
PGPASSWORD=$DB_PASS pg_dump -h $DB_HOST -p ${DB_PORT:-5432} -U $DB_USER -d $DB_NAME > "../$BACKUP_FILE"
fi
echo "✅ Backup created: $BACKUP_FILE"