Imagen destacada del tutorial: Migración entre Diferentes RDBMS
Bases de Datos SQL

Migración entre Diferentes RDBMS

José Elías Romero Guanipa
03 Sep 2025

Aprende a migrar datos entre MySQL, PostgreSQL, SQL Server y Oracle de manera efectiva.

migracion bases datos mysql postgresql oracle sql server +2 más

¡Domina la migración entre diferentes sistemas de gestión de bases de datos relacionales! En este tutorial completo te guiaré paso a paso para que aprendas a migrar datos, esquemas y configuraciones entre MySQL, PostgreSQL, SQL Server y Oracle de manera efectiva y segura.

Objetivo: Aprender técnicas completas de migración entre RDBMS incluyendo planificación, conversión de esquemas, migración de datos, validación y troubleshooting para transiciones exitosas entre sistemas de bases de datos.

Paso 1: ¿Por qué migrar entre RDBMS?

La migración entre RDBMS implica mover:

  • 📊 Esquemas de base de datos completos
  • 📝 Grandes volúmenes de datos
  • 🔄 Funciones y procedimientos almacenados
  • ⚙️ Configuraciones y permisos de usuarios
  • 🔍 Consultas y aplicaciones conectadas

Paso 2: Planificación de la migración

Evaluación previa del sistema actual

-- Inventario de objetos de base de datos
-- MySQL
SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'tu_base_datos';

-- PostgreSQL
SELECT schemaname, relname, n_live_tup 
FROM pg_stat_user_tables;

Herramientas de evaluación y planificación

  • AWS Database Migration Service: Para migraciones a la nube
  • Oracle SQL Developer: Para migraciones desde/hacia Oracle
  • pgLoader: Específico para migraciones a PostgreSQL
  • MySQL Workbench Migration Wizard: Para migraciones a MySQL

Paso 3: Migración de MySQL a PostgreSQL

Preparación del esquema MySQL

-- Generar script de esquema
mysqldump --no-data -u usuario -p tu_base_datos > esquema_mysql.sql

-- Exportar datos
mysqldump --no-create-info --skip-triggers --compact -u usuario -p tu_base_datos > datos_mysql.sql

Conversión automática con pgLoader

# Instalar pgloader
sudo apt-get install pgloader

# Crear archivo de configuración de migración
cat > migracion.load <<EOF
LOAD DATABASE
    FROM mysql://usuario:contraseña@localhost/tu_base_datos
    INTO postgresql://usuario:contraseña@localhost/tu_base_datos
WITH include drop, create tables, create indexes, reset sequences
SET work_mem to '32MB', maintenance_work_mem to '64MB'
EOF

# Ejecutar migración
pgloader migracion.load

Ajustes manuales comunes

-- Conversión de tipos de datos
-- MySQL INT AUTO_INCREMENT → PostgreSQL SERIAL
-- MySQL DATETIME → PostgreSQL TIMESTAMP
-- MySQL ENUM → PostgreSQL CREATE TYPE + CHECK constraint

-- Conversión de funciones
-- MySQL DATE_FORMAT() → PostgreSQL TO_CHAR()
-- MySQL IFNULL() → PostgreSQL COALESCE()

Paso 4: Migración de PostgreSQL a MySQL

Preparación del esquema PostgreSQL

-- Exportar esquema
pg_dump -s -O -x -n public -f esquema_postgres.sql tu_base_datos

-- Exportar datos
pg_dump -a -O -x -n public -f datos_postgres.sql tu_base_datos

Conversión de esquema

# Usar mysql-workbench para la migración
# O realizar conversión manual

# Patrones comunes de conversión:
-- PostgreSQL SERIAL → MySQL INT AUTO_INCREMENT
-- PostgreSQL VARCHAR(n) → MySQL VARCHAR(n)
-- PostgreSQL TEXT → MySQL LONGTEXT
-- PostgreSQL NUMERIC → MySQL DECIMAL

Migración de datos

# Usar pg2mysql para conversión de dump
# https://github.com/phpPgAdmin/phppgadmin/tree/master/classes/database/pg2mysql

python pg2mysql.py -f esquema_postgres.sql -o esquema_mysql.sql

# Importar a MySQL
mysql -u usuario -p tu_base_datos < esquema_mysql.sql
mysql -u usuario -p tu_base_datos < datos_postgres_convertido.sql

Paso 5: Migración desde/hacia SQL Server

Desde SQL Server a PostgreSQL

# Usar sqlserver2pgsql
# https://github.com/dalibo/sqlserver2pgsql

# Generar script de conversión
python sqlserver2pgsql.py -f esquema_sqlserver.sql -o esquema_postgres.sql

# Migrar datos con bcp (SQL Server) y psql (PostgreSQL)
bcp "SELECT * FROM tabla" queryout datos.dat -n -S servidor -U usuario -P contraseña

Desde SQL Server a MySQL

# Usar MySQL Workbench Migration Wizard
# O usar bcp para exportar e importar con LOAD DATA

# Exportar desde SQL Server
bcp "SELECT * FROM tabla" queryout datos.csv -c -t, -S servidor -U usuario -P contraseña

# Importar a MySQL
mysql -e "LOAD DATA INFILE 'datos.csv' INTO TABLE tabla FIELDS TERMINATED BY ','"

Paso 6: Migración desde Oracle

Desde Oracle a PostgreSQL

# Usar ora2pg
# https://github.com/darold/ora2pg

# Configurar conexión Oracle
echo "ORACLE_DSN dbi:Oracle:host=oracle_host;sid=DB_SID" > /etc/ora2pg.conf
echo "ORACLE_USER usuario" >> /etc/ora2pg.conf
echo "ORACLE_PWD contraseña" >> /etc/ora2pg.conf

# Generar script de migración
ora2pg -o esquema_postgres.sql -c /etc/ora2pg.conf

Desde Oracle a MySQL

# Usar MySQL Workbench Migration Wizard
# O usar SQL Developer para exportar

# Exportar datos como CSV desde Oracle
sqlplus usuario/contraseña @export_csv.sql

# Importar a MySQL
mysql -e "LOAD DATA INFILE 'datos.csv' INTO TABLE tabla"

Paso 7: Migración con herramientas ETL

Usando Pentaho Data Integration

# Crear transformación con:
# - Input step para la base origen
# - Transform steps para conversión de datos
# - Output step para la base destino

# Ejecutar desde línea de comandos
pan.sh -file=migracion.ktr

Usando Talend Open Studio

# Diseñar job de migración con componentes:
# - tDBInput para conexión origen
# - tMap para transformaciones
# - tDBOutput para conexión destino

# Ejecutar migración
./TalendJob/migracion.sh

Paso 8: Migración de funciones y procedimientos

Conversión de funciones

-- Ejemplo: Función de MySQL a PostgreSQL
-- MySQL
CREATE FUNCTION calcular_impuesto(monto DECIMAL) RETURNS DECIMAL
BEGIN
    RETURN monto * 0.16;
END

-- PostgreSQL
CREATE OR REPLACE FUNCTION calcular_impuesto(monto DECIMAL) 
RETURNS DECIMAL AS $$
BEGIN
    RETURN monto * 0.16;
END;
$$ LANGUAGE plpgsql;

Conversión de triggers

-- MySQL a PostgreSQL
-- MySQL
CREATE TRIGGER actualizar_auditoria 
BEFORE UPDATE ON tabla
FOR EACH ROW
BEGIN
    INSERT INTO auditoria VALUES (OLD.id, NOW());
END

-- PostgreSQL
CREATE OR REPLACE FUNCTION actualizar_auditoria() 
RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO auditoria VALUES (OLD.id, NOW());
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER actualizar_auditoria 
BEFORE UPDATE ON tabla
FOR EACH ROW EXECUTE FUNCTION actualizar_auditoria();

Paso 9: Migración de permisos y roles

Extracción de permisos

-- MySQL
SELECT CONCAT('GRANT ', privilege_type, ' ON ', table_schema, 
              '.', table_name, ' TO ''', grantee, ''';') 
FROM information_schema.user_privileges;

-- PostgreSQL
SELECT grantee, privilege_type, table_name 
FROM information_schema.role_table_grants;

Conversión de roles

# Script para convertir usuarios MySQL a PostgreSQL
mysql -u usuario -p -e "SELECT CONCAT('CREATE ROLE ', User, ' WITH LOGIN;') FROM mysql.user" > roles_postgres.sql

Paso 10: Validación y pruebas post-migración

Validación de datos

-- Comparar conteos
-- Sistema origen
SELECT COUNT(*) FROM tabla;

-- Sistema destino  
SELECT COUNT(*) FROM tabla;

-- Comparar checksums
-- MySQL
SELECT COUNT(*), MD5(GROUP_CONCAT(*)) FROM tabla;

-- PostgreSQL
SELECT COUNT(*), MD5(STRING_AGG(*::text, '')) FROM tabla;

Pruebas de rendimiento

# Ejecutar pruebas comparativas
# Sistema origen
time mysql -e "SELECT * FROM tabla WHERE condicion"

# Sistema destino
time psql -c "SELECT * FROM tabla WHERE condicion"

Paso 11: Estrategias para grandes volúmenes

Migración en fases

# Migrar tablas por lotes
#!/bin/bash
TABLAS=("tabla1" "tabla2" "tabla3")

for tabla in "${TABLAS[@]}"; do
    echo "Migrando $tabla..."
    # Comandos de migración para cada tabla
done

Migración con replicación

-- Configurar replicación bidireccional temporal
-- Durante la migración para minimizar downtime

-- MySQL a PostgreSQL usando pg_chameleon
# https://github.com/the4thdoctor/pg_chameleon

pg_chameleon set_configuration --config default --source mysql --target pgsql
pg_chameleon start_replication --config default

Paso 12: Automatización de la migración

Script de migración automatizado

#!/bin/bash
# migracion_automatizada.sh

# Variables de configuración
DB_ORIGEN="mysql://usuario:contraseña@localhost/origen"
DB_DESTINO="postgresql://usuario:contraseña@localhost/destino"
LOG_FILE="migracion.log"

# Función de logging
log() {
    echo "$(date): $1" | tee -a $LOG_FILE
}

# Paso 1: Exportar esquema
log "Exportando esquema..."
mysqldump --no-data -u usuario -p contraseña origen > esquema.sql

# Paso 2: Convertir esquema  
log "Convertiendo esquema..."
python convert_esquema.py esquema.sql esquema_convertido.sql

# Paso 3: Crear esquema en destino
log "Creando esquema en destino..."
psql -d destino -f esquema_convertido.sql

# Paso 4: Migrar datos
log "Migrando datos..."
pgloader $DB_ORIGEN $DB_DESTINO

# Paso 5: Validar migración
log "Validando migración..."
python validar_migracion.py

log "Migración completada!"

Pipeline CI/CD para migración

# .gitlab-ci.yml o Jenkinsfile
stages:
  - test
  - migrate
  - validate

migrate_db:
  stage: migrate
  script:
    - apt-get install -y pgloader
    - pgloader $MYSQL_DSN $POSTGRES_DSN
  only:
    - main

validate_migration:
  stage: validate  
  script:
    - python validate_migration.py

Paso 13: Troubleshooting común

Problemas de codificación

# Verificar codificación de datos
# MySQL
SHOW VARIABLES LIKE 'character_set%';

# PostgreSQL
SHOW SERVER_ENCODING;

# Solución: especificar codificación durante exportación
mysqldump --default-character-set=utf8 -u usuario -p base_datos

Problemas con tipos de datos

-- Solucionar diferencias en tipos de datos
-- Ejemplo: MySQL TIMESTAMP vs PostgreSQL TIMESTAMPTZ

-- Durante migración, convertir explícitamente
SELECT 
    CONVERT_TZ(timestamp_field, @@session.time_zone, '+00:00') 
AS timestamp_utc
FROM tabla;

Paso 14: Post-migración

Optimización del nuevo sistema

-- PostgreSQL después de migración desde MySQL
VACUUM ANALYZE;  -- Actualizar estadísticas
REINDEX DATABASE base_datos;  -- Reconstruir índices

-- MySQL después de migración
ANALYZE TABLE tabla;  -- Actualizar estadísticas
OPTIMIZE TABLE tabla;  -- Optimizar almacenamiento

Monitoreo post-migración

# Monitorear rendimiento después de migración
# PostgreSQL
pg_stat_statements  -- Consultas frecuentes
pg_stat_activity    -- Actividad actual

# MySQL
SHOW PROCESSLIST;   -- Procesos activos
SHOW STATUS;        -- Estadísticas globales

Paso 15: Herramientas recomendadas

Herramientas open source

  • pgloader: Migración a PostgreSQL
  • mysql2pgsql: MySQL a PostgreSQL
  • ora2pg: Oracle a PostgreSQL
  • SQL Server Migration Assistant: Para migraciones desde SQL Server

Herramientas comerciales

  • AWS Database Migration Service: Migración a la nube
  • Azure Database Migration Service: Migración a Azure
  • Ispirer MnMTK: Herramienta completa de migración

Paso 16: Mejores prácticas

  1. Planificar exhaustivamente: Documentar todo el proceso
  2. Realizar migración de prueba: En entorno staging primero
  3. Backup completo: Antes de comenzar la migración
  4. Comunicar downtime: Coordinar con usuarios afectados
  5. Validar exhaustivamente: Comprobar integridad de datos
  6. Monitorear post-migración: Detectar problemas temprano

Paso 17: Recursos y herramientas

Recursos para aprender más:

  • Documentación oficial: Guías de migración de cada RDBMS
  • Foros de comunidades: Stack Overflow, Reddit communities
  • Caso de estudio: Experiencias de migración de otras empresas
  • Herramientas de evaluación: Para calcular esfuerzo de migración

Conclusión

¡Felicidades! Ahora tienes el conocimiento necesario para planificar y ejecutar migraciones entre diferentes RDBMS. Practica estos conceptos en entornos de desarrollo antes de aplicarlos en producción.

Para más tutoriales sobre bases de datos y migraciones, visita nuestra sección de tutoriales.


¡Con estos conocimientos ya puedes migrar entre sistemas de bases de datos de manera efectiva!


💡 Tip Importante

📝 Mejores Prácticas para Migración de Bases de Datos

Para migrar efectivamente entre RDBMS, considera estos consejos esenciales:

  • Planifica detalladamente: Crea un plan de migración completo con timeline y riesgos identificados.

  • Prueba en entorno staging: Nunca migres directamente a producción sin probar primero.

  • Haz backups completos: Asegúrate de tener backups verificables antes de comenzar.

  • Valida los datos: Implementa validaciones automáticas para asegurar integridad de datos.

  • Considera el downtime: Planifica ventanas de mantenimiento apropiadas para tu negocio.

  • Documenta todo: Mantén registro detallado de cada paso y decisión tomada.

  • Ten un plan de rollback: Prepara estrategias para revertir la migración si algo sale mal.

  • Entrena al equipo: Asegúrate de que todos entiendan el proceso y sus responsabilidades.

📚 Documentación: Revisa las guías oficiales de migración de cada RDBMS y herramientas como AWS DMS para migraciones en la nube

¡Estos consejos te ayudarán a ejecutar migraciones exitosas y minimizar riesgos!

Comentarios

Comentarios

Inicia sesión para dejar un comentario.

No hay comentarios aún

Sé el primero en comentar este tutorial.

Tutoriales Relacionados

Descubre más tutoriales relacionados que podrían ser de tu interés

Imagen destacada del tutorial relacionado: Configuración Avanzada de MySQL y PostgreSQL
Bases de Datos SQL

Configuración Avanzada de MySQL y PostgreSQL

Domina configuraciones avanzadas para optimizar rendimiento y seguridad de MySQL y PostgreSQL en producción.

José Elías Romero Guanipa
03 Sep 2025
Imagen destacada del tutorial relacionado: Diseño de Bases de Datos: Fundamentos y Mejores Prácticas
Bases de Datos SQL

Diseño de Bases de Datos: Fundamentos y Mejores Prácticas

Aprende diseño de bases de datos desde cero. Normalización, modelado ER, relaciones y mejores prácticas.

José Elías Romero Guanipa
03 Sep 2025
Imagen destacada del tutorial relacionado: Instalación y Uso de RDBMS: MySQL, PostgreSQL y SQLite
Bases de Datos SQL

Instalación y Uso de RDBMS: MySQL, PostgreSQL y SQLite

Aprende a instalar y usar los principales sistemas de gestión de bases de datos relacionales.

José Elías Romero Guanipa
03 Sep 2025
Imagen destacada del tutorial relacionado: Introducción a SQL: Lenguaje de Bases de Datos Relacionales
Bases de Datos SQL

Introducción a SQL: Lenguaje de Bases de Datos Relacionales

Aprende SQL desde cero. Guía completa para trabajar con bases de datos relacionales con ejemplos prácticos.

José Elías Romero Guanipa
03 Sep 2025
Imagen destacada del tutorial relacionado: SQL para Datos Geoespaciales: Dominando Location Intelligence
Bases de Datos SQL

SQL para Datos Geoespaciales: Dominando Location Intelligence

Aprende a trabajar con datos geoespaciales en SQL. Análisis de ubicación, distancias y mapas con PostGIS y MySQL.

José Elías Romero Guanipa
03 Sep 2025
Foto de perfil del autor José Elías Romero Guanipa
José Elías Romero Guanipa
Autor

🌟 Nube de Etiquetas

Descubre temas populares en nuestros tutoriales

python
python 12 tutoriales
ciencia de datos
ciencia de datos 8 tutoriales
pandas
pandas 5 tutoriales
bases de datos
bases de datos 4 tutoriales
dataframe
dataframe 4 tutoriales
principiante
principiante 3 tutoriales
patrones diseño
patrones diseño 3 tutoriales
poo
poo 3 tutoriales
machine learning
machine learning 3 tutoriales
rendimiento
rendimiento 3 tutoriales
mysql
mysql 3 tutoriales
postgresql
postgresql 3 tutoriales
analisis de datos
analisis de datos 3 tutoriales
algoritmos
algoritmos 2 tutoriales
estructuras datos
estructuras datos 2 tutoriales
variables
variables 2 tutoriales
funciones
funciones 2 tutoriales
colaboracion
colaboracion 2 tutoriales
tutorial python
tutorial python 2 tutoriales
json
json 2 tutoriales
csv
csv 2 tutoriales
datetime
datetime 2 tutoriales
metaclasses
metaclasses 2 tutoriales
descriptores
descriptores 2 tutoriales
async await
async await 2 tutoriales

Las etiquetas más grandes y brillantes aparecen en más tutoriales

logo logo

©2024 ViveBTC