
Índice
- 1 Por qué migrar base de datos MySQL por SSH y no con phpMyAdmin
- 2 Requisitos previos antes de migrar base de datos MySQL
- 3 Exportar la base de datos con mysqldump
- 4 Transferir el archivo al nuevo servidor
- 5 Importar la base de datos MySQL por línea de comandos
- 6 Errores comunes al migrar base de datos MySQL y cómo solucionarlos
- 7 Conclusión
Por qué migrar base de datos MySQL por SSH y no con phpMyAdmin
Cuando la base de datos que quieres trasladar pesa lo suyo (digamos a partir de 100-200 MB), phpMyAdmin se queda corto. Y no por capricho: los límites de subida de PHP —suelen ser 2M, 8M o 64M según el hosting—, los tiempos de espera del servidor web y la memoria disponible provocan que la importación se caiga a mitad de proceso. Resultado: una base de datos corrupta o incompleta. Lo he visto más de una vez.
La línea de comandos vía SSH trabaja directo sobre el servidor, sin intermediarios. Un archivo de 2 GB que phpMyAdmin jamás llegaría a importar se traslada en minutos con mysqldump y mysql. El proceso, además, es reanudable y scriptable. Mucho más fiable, en fin.
Requisitos previos antes de migrar base de datos MySQL
Antes de tocar nada, asegúrate de tener esto:
- Acceso SSH al servidor de origen y al de destino, con usuario y contraseña o clave privada.
- Credenciales de MySQL en ambos: usuario, contraseña y nombre de la base.
- Espacio en disco suficiente para guardar el dump (calcula al menos el tamaño de la base). Compruébalo con df -h.
- Versión de MySQL o MariaDB compatible entre origen y destino. Ojo aquí: migrar de MySQL 8 a MySQL 5.7 puede generar problemas con el collation utf8mb4_0900_ai_ci, por ejemplo.
Conectarse al servidor por SSH
La conexión básica es así:
ssh usuario@servidor.com -p 22
Si el servidor usa un puerto distinto al estándar, indícalo con el parámetro -p. Una vez dentro, localiza tu base y mira cuánto ocupa:
mysql -u usuario -p -e «SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024,1) AS ‘MB’ FROM information_schema.tables GROUP BY table_schema;»
Exportar la base de datos con mysqldump
El comando estándar de exportación:
mysqldump -u usuario -p nombre_base_datos > backup.sql
Pero con bases grandes conviene añadir parámetros que mejoran velocidad y fiabilidad:
mysqldump -u usuario -p –single-transaction –quick –lock-tables=false nombre_base_datos > backup.sql
- –single-transaction: exporta sin bloquear las tablas InnoDB. Ideal si el sitio está en producción.
- –quick: lee las tablas fila a fila en vez de cargarlas enteras en memoria. Imprescindible con varios GB.
- –lock-tables=false: evita bloqueos en tablas MyISAM durante la exportación.
Comprimir el dump para ahorrar tiempo y espacio
Un SQL sin comprimir puede ocupar 5 o 10 veces más de lo necesario. Comprímelo en el mismo comando con gzip:
mysqldump -u usuario -p –single-transaction –quick nombre_base_datos | gzip > backup.sql.gz
¿Cuánto se ahorra? Una base de 3 GB puede quedar en 300-400 MB. Eso acelera bastante la transferencia.
Consejo: verifica siempre la integridad del dump antes de transferirlo. Con ls -lh backup.sql.gz confirmas el tamaño, y con gunzip -t backup.sql.gz compruebas que el archivo comprimido no está corrupto.
Transferir el archivo al nuevo servidor
Lo más eficiente es usar scp o rsync, desde tu máquina local o desde el servidor de origen:
scp -P 22 backup.sql.gz usuario@nuevoservidor.com:/home/usuario/
Si la transferencia se corta (pasa, y más con archivos grandes), rsync permite reanudarla donde se quedó:
rsync -avz –partial backup.sql.gz usuario@nuevoservidor.com:/home/usuario/
Hay otra opción: descargar el archivo por URL si lo dejas temporalmente en un directorio accesible por web. Aunque, seamos claros, eso implica un riesgo de seguridad. Usa nombres aleatorios y borra el archivo nada más terminar la importación.
Importar la base de datos MySQL por línea de comandos
Primero, crea la base vacía en el servidor de destino:
mysql -u usuario -p -e «CREATE DATABASE nombre_base_datos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;»
Si el dump está comprimido, descomprime e importa en un solo paso:
gunzip < backup.sql.gz | mysql -u usuario -p nombre_base_datos
O, si prefieres ir por partes:
gunzip backup.sql.gz
mysql -u usuario -p nombre_base_datos < backup.sql
Acelerar la importación en bases de datos muy grandes
La importación es donde más se sufre con bases de varios GB. Con estos ajustes puedes bajar el tiempo de horas a minutos:
- Desactivar temporalmente la comprobación de claves foráneas: añade al inicio del dump SET FOREIGN_KEY_CHECKS=0; y reactívala al final con el valor 1.
- Subir innodb_flush_log_at_trx_commit a 2 durante la importación y devolverlo a 1 al terminar.
- Usar el parámetro –init-command: mysql -u usuario -p –init-command=»SET SESSION FOREIGN_KEY_CHECKS=0″ nombre_base_datos < backup.sql
- Importar con myloader (de mydumper) si necesitas paralelizar la carga en servidores con varios núcleos.
Errores comunes al migrar base de datos MySQL y cómo solucionarlos
- «MySQL server has gone away»: el paquete a importar supera max_allowed_packet. Sube ese valor en el destino (a 512M, por ejemplo) o exporta con –max-allowed-packet=512M.
- Error 1226 o «User has exceeded resources»: el plan de hosting compartido limita recursos. Toca valorar un VPS o pedir un aumento temporal.
- Incompatibilidad de collations: al migrar desde MySQL 8 a versiones anteriores, sustituye utf8mb4_0900_ai_ci por utf8mb4_unicode_ci en el dump: sed -i ‘s/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g’ backup.sql
- Credenciales visibles en la línea de comandos: evita pasar la contraseña con -pcontraseña; usa solo -p para que MySQL la pida de forma segura.
Verificar la migración
Ya está importada. ¿Y ahora? Comprueba que el número de tablas y registros coincide con el origen:
mysql -u usuario -p -e «USE nombre_base_datos; SHOW TABLES; SELECT COUNT(*) FROM tabla_principal;»
Si es un WordPress, recuerda actualizar la URL del sitio en la tabla wp_options y en wp_posts si cambia el dominio. Lo más cómodo: WP-CLI con el comando wp search-replace.
Preguntas frecuentes
¿Cuánto tarda en importarse una base de datos de 1 GB?
En un VPS con SSD bien configurado, entre 3 y 10 minutos. En hosting compartido puede tardar bastante más, o fallar directamente por límites de recursos.
¿Puedo migrar sin descargar el archivo a mi equipo?
Sí. Si ambos servidores permiten SSH, puedes usar scp directamente entre ellos, o incluso pipe el dump de un servidor a otro en un solo comando.
¿Es seguro borrar el dump después?
Cuando hayas verificado la web en el nuevo servidor y confirmado que todo funciona, adelante. Eso sí, conviene conservarlo unos días como copia de seguridad.
Conclusión
Cuando el tamaño supera los pocos cientos de megabytes, migrar base de datos MySQL por SSH es la única vía realmente fiable. Con mysqldump y sus parámetros bien puestos, compresión con gzip y transferencia mediante scp o rsync, bases de varios gigabytes se trasladan en minutos, sin los errores de tiempo de espera de phpMyAdmin. Verifica siempre los datos tras la importación y ajusta la configuración si trabajas con volúmenes grandes. ¿Y si surgen errores de importación, incompatibilidades de versión o problemas de recursos en el servidor? En RedServicio (redservicio.net) encontrarás ayuda profesional para hacer la migración de forma segura y sin interrupciones para tu sitio web.

