#!/bin/bash # MSP Monitor Dashboard - Database Backup Script # Crea un backup de la base de datos PostgreSQL set -e # Configuracion BACKUP_DIR="${BACKUP_DIR:-/backups}" RETENTION_DAYS="${RETENTION_DAYS:-30}" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="msp_monitor_${DATE}.sql.gz" # Cargar variables de entorno if [ -f .env ]; then export $(cat .env | grep -v '^#' | xargs) fi # Valores por defecto DB_HOST="${DB_HOST:-localhost}" DB_PORT="${DB_PORT:-5432}" DB_USER="${POSTGRES_USER:-mspmonitor}" DB_NAME="${POSTGRES_DB:-msp_monitor}" DB_PASSWORD="${POSTGRES_PASSWORD:-changeme}" echo "======================================" echo " MSP Monitor - Database Backup" echo "======================================" echo "Fecha: $(date)" echo "Base de datos: $DB_NAME" echo "" # Crear directorio de backups si no existe mkdir -p "$BACKUP_DIR" # Crear backup echo "Creando backup..." export PGPASSWORD="$DB_PASSWORD" pg_dump -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" \ --no-owner --no-privileges --format=custom | gzip > "$BACKUP_DIR/$BACKUP_FILE" unset PGPASSWORD # Verificar que el backup se creo correctamente if [ -f "$BACKUP_DIR/$BACKUP_FILE" ]; then SIZE=$(du -h "$BACKUP_DIR/$BACKUP_FILE" | cut -f1) echo "[✓] Backup creado: $BACKUP_DIR/$BACKUP_FILE ($SIZE)" else echo "[✗] Error creando backup" exit 1 fi # Eliminar backups antiguos echo "" echo "Limpiando backups antiguos (mas de $RETENTION_DAYS dias)..." find "$BACKUP_DIR" -name "msp_monitor_*.sql.gz" -type f -mtime +$RETENTION_DAYS -delete REMAINING=$(ls -1 "$BACKUP_DIR"/msp_monitor_*.sql.gz 2>/dev/null | wc -l) echo "[✓] Backups restantes: $REMAINING" # Opcional: Subir a S3 si esta configurado if [ -n "$S3_BUCKET" ] && command -v aws &> /dev/null; then echo "" echo "Subiendo backup a S3..." aws s3 cp "$BACKUP_DIR/$BACKUP_FILE" "s3://$S3_BUCKET/backups/$BACKUP_FILE" echo "[✓] Backup subido a s3://$S3_BUCKET/backups/$BACKUP_FILE" fi echo "" echo "======================================" echo " Backup completado" echo "======================================"