#!/bin/bash # Script para ejecutar migraciones de base de datos # Se ejecuta automáticamente al iniciar el contenedor de mantenimiento LOG_FILE="/var/log/cron/migrations.log" MIGRATIONS_DIR="/var/www/html/database" MIGRATIONS_APPLIED="/var/www/html/logs/.migrations_applied" echo "========================================" | tee -a "$LOG_FILE" echo "[$(date '+%Y-%m-%d %H:%M:%S')] Verificando migraciones..." | tee -a "$LOG_FILE" echo "========================================" | tee -a "$LOG_FILE" # Crear archivo de control si no existe touch "$MIGRATIONS_APPLIED" # Verificar conexión a BD if ! mariadb-admin ping -h "${DB_HOST}" -u "${DB_USER}" --password="${DB_PASS}" --silent 2>/dev/null; then echo "[ERROR] No se pudo conectar a la base de datos" | tee -a "$LOG_FILE" exit 1 fi # Ejecutar cada archivo .sql en orden alfabético for migration_file in $(ls -1 "$MIGRATIONS_DIR"/*.sql 2>/dev/null | sort); do filename=$(basename "$migration_file") # Verificar si ya fue aplicada if grep -q "^${filename}$" "$MIGRATIONS_APPLIED" 2>/dev/null; then echo "[SKIP] $filename - Ya aplicada" | tee -a "$LOG_FILE" continue fi echo "[RUN] Ejecutando migración: $filename" | tee -a "$LOG_FILE" # Ejecutar la migración if mysql -h "${DB_HOST}" -u "${DB_USER}" --password="${DB_PASS}" "${DB_NAME}" < "$migration_file" 2>&1 | tee -a "$LOG_FILE"; then echo "[OK] $filename - Aplicada correctamente" | tee -a "$LOG_FILE" # Marcar como aplicada echo "$filename" >> "$MIGRATIONS_APPLIED" else echo "[ERROR] $filename - Falló la migración" | tee -a "$LOG_FILE" exit 1 fi done echo "========================================" | tee -a "$LOG_FILE" echo "[$(date '+%Y-%m-%d %H:%M:%S')] Migraciones completadas" | tee -a "$LOG_FILE" echo "========================================" | tee -a "$LOG_FILE"