37 lines
1.3 KiB
Bash
Executable File
37 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -eo pipefail
|
|
|
|
# Configuration
|
|
CONTAINER_NAME="${DB_CONTAINER_NAME:-canino_db_prod}"
|
|
DB_USER="${POSTGRES_USER:-canino_prod}"
|
|
DB_NAME="${POSTGRES_DB:-caninodb_prod}"
|
|
BACKUP_DIR="${BACKUP_DIR:-/var/backups/canina_db}"
|
|
RETENTION_DAYS=7
|
|
|
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
BACKUP_FILE="${BACKUP_DIR}/canina_db_${TIMESTAMP}.sql.gz"
|
|
|
|
echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] Starting automated PostgreSQL backup..."
|
|
echo "Target Container: ${CONTAINER_NAME}"
|
|
echo "Database: ${DB_NAME}"
|
|
echo "Backup Output: ${BACKUP_FILE}"
|
|
|
|
# Ensure backup directory exists
|
|
mkdir -p "${BACKUP_DIR}"
|
|
|
|
# Execute compressed database dump
|
|
if docker exec "${CONTAINER_NAME}" pg_dump -U "${DB_USER}" -d "${DB_NAME}" | gzip > "${BACKUP_FILE}"; then
|
|
BACKUP_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1)
|
|
echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] Backup completed successfully! File size: ${BACKUP_SIZE}"
|
|
else
|
|
echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] ERROR: Backup failed!" >&2
|
|
rm -f "${BACKUP_FILE}"
|
|
exit 1
|
|
fi
|
|
|
|
# Purge backups older than RETENTION_DAYS (7 days)
|
|
echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] Purging backups older than ${RETENTION_DAYS} days from ${BACKUP_DIR}..."
|
|
find "${BACKUP_DIR}" -type f -name "canina_db_*.sql.gz" -mtime +"${RETENTION_DAYS}" -exec rm -f {} \; -verbose || true
|
|
|
|
echo "[$(date -u +'%Y-%m-%dT%H:%M:%SZ')] Backup process completed."
|