Migrar base de datos entre servidores
¿Qué es migrar una base de datos?
Migrar una base de datos significa transferir todos los datos, estructura y configuraciones de una base de datos desde un servidor origen a un servidor destino. Esto es común cuando cambiás de hosting, actualizás servidores o necesitás mover datos a un entorno diferente.
Métodos de migración
Existen varios métodos para migrar bases de datos MySQL/MariaDB:
- mysqldump: Exporta a SQL y luego importa (más común)
- Replicación: Sincroniza datos en tiempo real
- Copia directa de archivos: Copia los archivos físicos de la base de datos
- Herramientas GUI: phpMyAdmin, MySQL Workbench, etc.
Método 1: Usando mysqldump (Recomendado)
Paso 1: Exportar la base de datos en el servidor origen
# Exportar base de datos completa
mysqldump -u usuario -p nombre_base_datos > backup.sql
# Exportar con charset UTF-8
mysqldump -u usuario -p --default-character-set=utf8mb4 nombre_base_datos > backup.sql
# Exportar todas las bases de datos
mysqldump -u usuario -p --all-databases > todas_las_bases.sql
# Exportar solo estructura (sin datos)
mysqldump -u usuario -p --no-data nombre_base_datos > estructura.sql
# Exportar solo datos (sin estructura)
mysqldump -u usuario -p --no-create-info nombre_base_datos > datos.sql
Paso 2: Transferir el archivo al servidor destino
Usando SCP:
scp backup.sql usuario@servidor_destino:/ruta/destino/
Usando FTP/SFTP:
Subí el archivo usando FileZilla, WinSCP o cualquier cliente FTP.
Usando rsync:
rsync -avz backup.sql usuario@servidor_destino:/ruta/destino/
Paso 3: Crear la base de datos en el servidor destino
mysql -u root -p
CREATE DATABASE nombre_base_datos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;
Paso 4: Importar la base de datos en el servidor destino
mysql -u usuario -p nombre_base_datos < backup.sql
O desde dentro de MySQL:
mysql -u usuario -p
USE nombre_base_datos;
SOURCE /ruta/completa/backup.sql;
Método 2: Migración directa entre servidores
Si ambos servidores tienen acceso entre sí, podés hacer la migración directamente:
# En el servidor destino
mysqldump -h servidor_origen -u usuario -p nombre_base_datos | mysql -u usuario -p nombre_base_datos
O usando un túnel SSH:
# Crear túnel SSH
ssh -L 3307:localhost:3306 usuario@servidor_origen
# En otra terminal, migrar a través del túnel
mysqldump -h 127.0.0.1 -P 3307 -u usuario -p nombre_base_datos | mysql -u usuario -p nombre_base_datos
Método 3: Usando phpMyAdmin
Exportar:
- Accedé a phpMyAdmin en el servidor origen
- Seleccioná la base de datos
- Hacé clic en "Exportar"
- Elegí el método "Personalizado"
- Seleccioná todas las tablas y opciones necesarias
- Hacé clic en "Continuar" y descargá el archivo SQL
Importar:
- Accedé a phpMyAdmin en el servidor destino
- Creá la base de datos si no existe
- Seleccioná la base de datos
- Hacé clic en "Importar"
- Seleccioná el archivo SQL descargado
- Hacé clic en "Continuar"
Verificar la migración
1. Verificar que todas las tablas se importaron:
mysql -u usuario -p nombre_base_datos
SHOW TABLES;
2. Verificar el número de registros:
SELECT COUNT(*) FROM nombre_tabla;
3. Comparar tamaños:
SELECT
table_name AS 'Tabla',
table_rows AS 'Filas',
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Tamaño (MB)'
FROM information_schema.TABLES
WHERE table_schema = 'nombre_base_datos'
ORDER BY (data_length + index_length) DESC;
4. Verificar usuarios y permisos:
SELECT user, host FROM mysql.user WHERE user = 'nombre_usuario';
SHOW GRANTS FOR 'nombre_usuario'@'localhost';
Migrar usuarios y permisos
Los usuarios no se migran automáticamente con mysqldump. Para migrarlos:
# Exportar usuarios
mysql -u root -p -e "SELECT CONCAT('CREATE USER ''', user, '''@''', host, ''' IDENTIFIED BY ''password'';') FROM mysql.user WHERE user != 'root' AND user != '';" > usuarios.sql
# O más simple, exportar tabla de usuarios
mysqldump -u root -p mysql user db tables_priv columns_priv procs_priv > usuarios_permisos.sql
# Importar en servidor destino
mysql -u root -p mysql < usuarios_permisos.sql
FLUSH PRIVILEGES;
Migrar bases de datos grandes
Para bases de datos muy grandes, considerá estas opciones:
1. Comprimir durante la exportación:
mysqldump -u usuario -p nombre_base_datos | gzip > backup.sql.gz
2. Exportar por tablas:
# Listar tablas
mysql -u usuario -p -e "SHOW TABLES FROM nombre_base_datos;" > tablas.txt
# Exportar cada tabla por separado
for tabla in $(cat tablas.txt); do
mysqldump -u usuario -p nombre_base_datos $tabla > ${tabla}.sql
done
3. Usar mydumper (herramienta más rápida):
# Instalar mydumper
sudo apt install mydumper
# Exportar
mydumper -u usuario -p contraseña -B nombre_base_datos -o /ruta/backup/
# Importar
myloader -u usuario -p contraseña -d /ruta/backup/
Problemas comunes y soluciones
Error: "Access denied"
- Verificá que el usuario tenga permisos en ambos servidores
- Usá el usuario root si es necesario
Error: "Table doesn't exist"
- Verificá que la base de datos se haya creado correctamente
- Revisá que el archivo SQL se haya importado completamente
Error: "Out of memory"
- Exportá por tablas en lugar de toda la base de datos
- Aumentá la memoria disponible para MySQL
- Usá mydumper en lugar de mysqldump
Caracteres extraños después de la migración
- Exportá con
--default-character-set=utf8mb4 - Importá con el mismo charset
- Verificá la configuración de charset en ambos servidores
Checklist de migración
- ✅ Hacer backup completo del servidor origen
- ✅ Verificar espacio disponible en servidor destino
- ✅ Crear base de datos en servidor destino
- ✅ Exportar base de datos del servidor origen
- ✅ Transferir archivo al servidor destino
- ✅ Importar base de datos en servidor destino
- ✅ Verificar que todas las tablas se importaron
- ✅ Verificar que los datos son correctos
- ✅ Migrar usuarios y permisos si es necesario
- ✅ Actualizar configuración de aplicaciones
- ✅ Probar la aplicación en el nuevo servidor
- ✅ Hacer backup del servidor destino
Mejores prácticas
- Hacé backups: Siempre hacé un backup completo antes de migrar
- Probá primero: Probá la migración en un entorno de desarrollo si es posible
- Verificá después: Siempre verificá que la migración fue exitosa
- Documentá: Guardá un registro de los pasos seguidos
- Planificá el tiempo de inactividad: Si es necesario, coordiná con los usuarios
- Mantené ambos servidores: No eliminés el servidor origen hasta verificar que todo funciona
¿Necesitás ayuda?
Si tenés problemas migrando tu base de datos o necesitás asistencia, abrí un ticket desde el panel de billing.baires.host o contactanos por soporte.
También podés escribirnos por nuestras redes:
- Instagram: @baires_host
- Discord (soporte activo): https://discord.gg/dzjauatAFN
- Linktree: https://linktr.ee/baires.host