Probar gratis
5 min lectura Guide 365 of 877

Gestión de Migraciones de Base de Datos

Las migraciones de base de datos son la parte más riesgosa del deployment. Tocan datos, no siempre pueden deshacerse, y afectan aplicaciones en ejecución. Buena gestión de migraciones mantiene los datos seguros mientras habilita la evolución.

Seguridad de Migraciones

RiesgoMitigación
Pérdida de datosBackups, rollback probado
DowntimePatrones zero-downtime
CorrupciónTesting en staging
PerformanceAnálisis de índices

Fundamentos de Migración

Control de Versiones

GESTIÓN DE MIGRACIONES
══════════════════════

VERSIONADO:
─────────────────────────────────────
migrations/
├── 001_create_users.sql
├── 002_add_email_to_users.sql
├── 003_create_orders.sql
├── 004_add_index_on_orders.sql
└── Secuencial, rastreado

ARCHIVO DE MIGRACIÓN:
─────────────────────────────────────
-- Migración: 002_add_email_to_users
-- Creada: 2024-01-15
-- Autor: developer@example.com

-- Up
ALTER TABLE users ADD COLUMN email VARCHAR(255);

-- Down
ALTER TABLE users DROP COLUMN email;

HERRAMIENTAS:
─────────────────────────────────────
├── Flyway (migraciones SQL)
├── Liquibase (XML/SQL)
├── Laravel Migrations (PHP)
├── Alembic (Python)
├── Knex (Node.js)
├── Rails Migrations (Ruby)
└── Herramientas específicas por framework

EJECUCIÓN:
─────────────────────────────────────
├── Ejecutar migraciones pendientes
├── Rastrear migraciones ejecutadas
├── Nunca modificar migraciones ejecutadas
├── Nuevos cambios = nueva migración
└── Historia inmutable

Patrones Zero-Downtime

Cambios Seguros

MIGRACIONES ZERO-DOWNTIME
═════════════════════════

OPERACIONES SEGURAS:
─────────────────────────────────────
Siempre seguras:
├── Agregar nueva tabla
├── Agregar columna nullable
├── Agregar índice (concurrent)
├── Agregar columna con default
└── Cambios aditivos

OPERACIONES PELIGROSAS:
─────────────────────────────────────
Necesitan manejo cuidadoso:
├── Remover columna
├── Renombrar columna
├── Cambiar tipo de columna
├── Agregar constraint NOT NULL
├── Requieren enfoque multi-paso
└── Nunca en una sola migración

PATRÓN RENOMBRAR COLUMNA:
─────────────────────────────────────
Objetivo: Renombrar 'name' a 'full_name'

Paso 1: Agregar nueva columna
ALTER TABLE users ADD COLUMN full_name VARCHAR(255);

Paso 2: Deploy código que escribe a ambas
columna_vieja y columna_nueva

Paso 3: Backfill datos
UPDATE users SET full_name = name WHERE full_name IS NULL;

Paso 4: Deploy código que lee de columna_nueva

Paso 5: Dejar de escribir a columna vieja

Paso 6: Remover columna vieja (más tarde)
ALTER TABLE users DROP COLUMN name;

Timeline:
├── Migración 1 (agregar columna)
├── Deploy 1 (escribir ambas)
├── Migración 2 (backfill)
├── Deploy 2 (leer nueva)
├── Deploy 3 (solo escribir nueva)
└── Migración 3 (remover vieja)

Tipos de Migración

Schema vs Datos

TIPOS DE MIGRACIÓN:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ MIGRACIÓN DE SCHEMA:                                        │
│ ────────────────────                                        │
│ Cambia estructura de la base de datos                      │
│ • CREATE TABLE                                             │
│ • ALTER TABLE ADD/DROP COLUMN                              │
│ • CREATE INDEX                                             │
│ • ADD CONSTRAINT                                           │
│                                                             │
│ Características:                                            │
│ • Generalmente rápidas                                     │
│ • Fáciles de revertir                                      │
│ • Pueden bloquear tablas                                   │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ MIGRACIÓN DE DATOS:                                         │
│ ───────────────────                                         │
│ Cambia contenido de la base de datos                       │
│ • UPDATE masivos                                           │
│ • INSERT desde otra tabla                                  │
│ • Transformaciones de datos                                │
│ • Backfills                                                │
│                                                             │
│ Características:                                            │
│ • Pueden ser lentas (tablas grandes)                       │
│ • Difíciles de revertir                                    │
│ • Considerar ejecutar en batches                           │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ MANTENER SEPARADAS:                                         │
│ • Una migración = un tipo                                  │
│ • Facilita rollback                                        │
│ • Mejor visibilidad                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Ejecución de Migración

Orden de Operaciones

ORDEN DE EJECUCIÓN:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ 1. BACKUP                                                   │
│    └── Siempre antes de cualquier migración               │
│                                                             │
│ 2. EJECUTAR EN STAGING                                      │
│    ├── Con datos similares a producción                    │
│    └── Verificar tiempo de ejecución                       │
│                                                             │
│ 3. PLANIFICAR VENTANA                                       │
│    ├── Período de bajo tráfico                             │
│    └── Tiempo suficiente para rollback                     │
│                                                             │
│ 4. COMUNICAR                                                │
│    ├── Notificar stakeholders                              │
│    └── Alertar equipo de on-call                           │
│                                                             │
│ 5. EJECUTAR                                                 │
│    ├── Monitorear durante ejecución                        │
│    └── Tener rollback listo                                │
│                                                             │
│ 6. VERIFICAR                                                │
│    ├── Probar aplicación                                   │
│    ├── Revisar logs de errores                             │
│    └── Monitorear métricas                                 │
│                                                             │
│ 7. DOCUMENTAR                                               │
│    ├── Registrar cambios                                   │
│    └── Actualizar documentación                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Soluciones Relacionadas