canina/scripts/backup_db.sh
2026-08-08 17:46:42 +03:30

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."