GitScrum / Docs
Todas las Mejores Prácticas

Gestión de Migraciones de Base de Datos | GitScrum

Gestiona migraciones de BD de forma segura con versionado, testing y estrategias de rollback. Usa GitScrum para tracking y coordinación.

5 min de lectura

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