76 lines
2.5 KiB
Bash
76 lines
2.5 KiB
Bash
#!/bin/bash
|
|
# database/scripts/backup.sh
|
|
set -e
|
|
|
|
# ============================================================================
|
|
# CONFIGURATION
|
|
# ============================================================================
|
|
|
|
CONTAINER_NAME="${CONTAINER_NAME:-aurganize-postgres}"
|
|
|
|
# Host directory (on your laptop / machine)
|
|
BACKUP_DIR="${BACKUP_DIR:-$HOME/workspace/db_backup/aurganize_backups}"
|
|
|
|
DB_NAME="${DB_NAME:-aurganize_dev}"
|
|
DB_USER="${DB_USER:-aurganize_backend_api}"
|
|
RETENTION_DAYS="${RETENTION_DAYS:-30}"
|
|
|
|
# Ensure host backup directory exists
|
|
mkdir -p "${BACKUP_DIR}"
|
|
|
|
# Timestamped filename on host
|
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz"
|
|
|
|
echo "==================================================================="
|
|
echo "PostgreSQL Backup (Docker) - $(date)"
|
|
echo "==================================================================="
|
|
echo "Container: ${CONTAINER_NAME}"
|
|
echo "Database : ${DB_NAME}"
|
|
echo "Backup : ${BACKUP_FILE}"
|
|
echo ""
|
|
|
|
# ============================================================================
|
|
# BACKUP EXECUTION
|
|
# ============================================================================
|
|
|
|
echo "Creating backup inside Docker container..."
|
|
|
|
docker exec -i "${CONTAINER_NAME}" \
|
|
pg_dump -U "${DB_USER}" -d "${DB_NAME}" --format=plain --no-owner --no-privileges \
|
|
| gzip > "${BACKUP_FILE}"
|
|
|
|
# ============================================================================
|
|
# VERIFY BACKUP
|
|
# ============================================================================
|
|
|
|
if [ -f "${BACKUP_FILE}" ]; then
|
|
SIZE=$(du -h "${BACKUP_FILE}" | cut -f1)
|
|
echo "✓ Backup created successfully (${SIZE})"
|
|
else
|
|
echo "✗ Backup failed!"
|
|
exit 1
|
|
fi
|
|
|
|
# ============================================================================
|
|
# CLEANUP OLD BACKUPS
|
|
# ============================================================================
|
|
|
|
echo ""
|
|
echo "Cleaning up old backups (older than ${RETENTION_DAYS} days)..."
|
|
|
|
find "${BACKUP_DIR}" -name "${DB_NAME}_*.sql.gz" -type f -mtime +${RETENTION_DAYS} -delete
|
|
|
|
# ============================================================================
|
|
# LIST BACKUPS
|
|
# ============================================================================
|
|
|
|
echo ""
|
|
echo "Available backups:"
|
|
ls -lh "${BACKUP_DIR}/${DB_NAME}"_*.sql.gz 2>/dev/null || echo "No backups found."
|
|
|
|
echo ""
|
|
echo "==================================================================="
|
|
echo "Backup Complete!"
|
|
echo "==================================================================="
|