49 lines
1.9 KiB
Bash
Executable File
49 lines
1.9 KiB
Bash
Executable File
#!/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"
|