cmms/backend/scripts/backup-db.sh

55 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# Atlas CMMS Database Backup Script
# This script creates a backup of the Atlas CMMS PostgreSQL database
# Configuration
CONTAINER_NAME="atlas_db"
DB_NAME="atlas"
DB_USER="rootUser"
BACKUP_DIR="./backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="atlas_backup_${TIMESTAMP}.sql"
# Create backup directory if it doesn't exist
mkdir -p "${BACKUP_DIR}"
echo "Starting Atlas CMMS database backup..."
echo "Container: ${CONTAINER_NAME}"
echo "Database: ${DB_NAME}"
echo "Backup file: ${BACKUP_DIR}/${BACKUP_FILE}"
# Check if container is running
if ! docker ps | grep -q "${CONTAINER_NAME}"; then
echo "Error: PostgreSQL container '${CONTAINER_NAME}' is not running"
exit 1
fi
# Create database backup
docker exec "${CONTAINER_NAME}" pg_dump \
-U "${DB_USER}" \
-d "${DB_NAME}" \
--no-password \
--verbose \
--clean \
--if-exists \
--create > "${BACKUP_DIR}/${BACKUP_FILE}"
# Check if backup was successful
if [ $? -eq 0 ]; then
echo "Backup completed successfully: ${BACKUP_DIR}/${BACKUP_FILE}"
# Compress the backup file
gzip "${BACKUP_DIR}/${BACKUP_FILE}"
echo "Backup compressed: ${BACKUP_DIR}/${BACKUP_FILE}.gz"
# Optional: Remove backups older than 30 days
find "${BACKUP_DIR}" -name "atlas_backup_*.sql.gz" -mtime +30 -delete
echo "Old backups (>30 days) cleaned up"
else
echo "Error: Backup failed"
rm -f "${BACKUP_DIR}/${BACKUP_FILE}"
exit 1
fi
echo "Backup process completed"