Cómo migrar una base de datos MySQL de un hosting a otro usando SSH
¡Hola! Soy tu técnico de soporte amigable. Hoy vamos a aprender juntos algo muy útil: cómo migrar una base de datos MySQL de un hosting a otro usando SSH. No te preocupes si no eres un experto, te guiaré paso a paso con un lenguaje sencillo y muchos ejemplos prácticos.
Migrar una base de datos puede parecer complicado, pero con las herramientas adecuadas y un poco de paciencia, lo harás en un santiamén. Aquí te explicaré todo lo que necesitas saber, desde la preparación hasta la verificación final. ¡Vamos allá!
¿Qué necesitas antes de empezar?
Antes de lanzarte a la migración, asegúrate de tener lo siguiente:
- Acceso SSH a ambos servidores: Necesitarás las credenciales de conexión (usuario, IP y contraseña o clave SSH) tanto del hosting origen como del destino.
- Datos de la base de datos: El nombre de la base de datos, el usuario y la contraseña. Si no los recuerdas, puedes encontrarlos en el panel de control de tu hosting (por ejemplo, en Syspanel, que usa el puerto 2106).
- Herramientas básicas: En la mayoría de los servidores Linux ya están instalados
mysqldumpymysql. Si no, pide a tu proveedor que los instale. - Conexión estable: Una buena conexión a internet evitará cortes durante la transferencia.
[INFO] Si usas Syspanel (HestiaCP), recuerda que el acceso es a través del puerto 2106. Puedes gestionar tus bases de datos desde allí antes de la migración.
Paso 1: Conectarse al servidor origen por SSH
El primer paso es acceder al servidor donde está tu base de datos actual. Abre tu terminal (en Windows puedes usar PowerShell o programas como PuTTY) y escribe:
ssh usuario@ip-del-servidor-origen
Te pedirá la contraseña. Una vez dentro, verás algo como usuario@servidor:~$. ¡Ya estás listo!
Verificar la base de datos
Antes de exportar, asegúrate de que la base de datos existe y tiene datos. Ejecuta:
mysql -u usuario -p -e "SHOW DATABASES;"
Te pedirá la contraseña de MySQL. Verás una lista con todas las bases de datos. Identifica la que quieres migrar (por ejemplo, mi_basedatos).
Paso 2: Exportar la base de datos con mysqldump
Para migrar base de datos MySQL SSH, usaremos mysqldump, una herramienta que crea un archivo de copia de seguridad con todo el contenido (tablas, datos, procedimientos, etc.). Ejecuta:
mysqldump -u usuario -p --databases mi_basedatos > mi_basedatos.sql
Explicación:
-u usuario: Tu usuario de MySQL.-p: Te pedirá la contraseña.--databases mi_basedatos: Indica qué base de datos exportar.> mi_basedatos.sql: Guarda la salida en un archivo llamadomi_basedatos.sql.
[TIP] Si la base de datos es muy grande, añade
--compresspara reducir el tamaño del archivo, o--single-transactionpara evitar bloqueos en tablas InnoDB.
Comprobar el archivo
Una vez terminado, verifica que el archivo se creó:
ls -lh mi_basedatos.sql
Deberías ver algo como -rw-r--r-- 1 usuario usuario 2.3M .... Si el tamaño es 0, algo salió mal (revisa usuario y contraseña).
Paso 3: Transferir el archivo al servidor destino
Ahora necesitas transferir MySQL hosting de origen a destino. Usaremos scp (copia segura por SSH). Desde el servidor origen, escribe:
scp mi_basedatos.sql usuario@ip-del-servidor-destino:/ruta/destino/
Te pedirá la contraseña del servidor destino. El archivo se copiará a la ruta que indiques (por ejemplo, /home/usuario/).
[WARNING] Si el archivo es muy grande, la transferencia puede tardar. Usa
screenotmuxpara que no se interrumpa si pierdes conexión. Por ejemplo:screen -S migraciony luego ejecuta el comando.
Alternativa: Transferencia directa con pipes
Si prefieres no crear archivos intermedios, puedes migrar base de datos MySQL SSH directamente con un pipe. Desde el servidor origen:
mysqldump -u usuario -p --databases mi_basedatos | ssh usuario@ip-destino "mysql -u usuario_destino -p"
Esto exporta y envía directamente al servidor destino. Es más rápido, pero requiere que ambos servidores tengan acceso SSH y MySQL configurado.
Paso 4: Importar la base de datos en el servidor destino
Ya tienes el archivo mi_basedatos.sql en el destino. Ahora conéctate por SSH a ese servidor:
ssh usuario@ip-del-servidor-destino
Crear la base de datos (si no existe)
A veces la base de datos destino ya está creada, pero si no, hazlo:
mysql -u usuario_destino -p -e "CREATE DATABASE mi_basedatos;"
Importar el archivo
Ejecuta:
mysql -u usuario_destino -p mi_basedatos < mi_basedatos.sql
Te pedirá la contraseña. Si todo va bien, verás solo un mensaje de éxito o ningún error.
[INFO] Si la importación falla, verifica que el usuario destino tenga permisos sobre la base de datos. Puedes asignarlos con:
GRANT ALL PRIVILEGES ON mi_basedatos.* TO 'usuario_destino'@'localhost';y luegoFLUSH PRIVILEGES;.
Paso 5: Verificar la migración
No te confíes. Asegúrate de que los datos están completos. Conéctate a MySQL en el destino:
mysql -u usuario_destino -p
Luego dentro de MySQL:
USE mi_basedatos;
SHOW TABLES;
SELECT COUNT(*) FROM tu_tabla_principal;
Si ves las tablas y los registros coinciden con el origen, ¡felicidades! La migración MySQL servidor fue exitosa.
Comprobar integridad
Puedes comparar el número de filas de una tabla clave en ambos servidores. Desde el origen:
mysql -u usuario -p -e "SELECT COUNT(*) FROM mi_basedatos.tu_tabla;"
Y en el destino lo mismo. Si coinciden, todo está bien.
Errores comunes y cómo solucionarlos
Error de conexión SSH
Si no puedes conectar, verifica:
- La IP y el puerto (por defecto 22, pero en Syspanel puede ser diferente).
- Que el usuario tenga permisos SSH.
- Si usas clave SSH, asegúrate de que esté en la ruta correcta (
~/.ssh/id_rsa).
Error de permisos MySQL
Si ves Access denied for user, el usuario no tiene permisos sobre la base de datos. En el destino, ejecuta:
mysql -u root -p -e "GRANT ALL PRIVILEGES ON mi_basedatos.* TO 'usuario_destino'@'localhost'; FLUSH PRIVILEGES;"
Archivo SQL corrupto
Si la importación da errores de sintaxis, el archivo pudo dañarse durante la transferencia. Vuelve a copiarlo usando scp o verifica el checksum con md5sum.
Consejos adicionales para una migración sin problemas
- Haz una copia de seguridad antes: Siempre es bueno tener un respaldo por si algo sale mal.
- Prueba en un entorno de staging: Si es posible, migra primero a un servidor de pruebas.
- Ajusta el tiempo de ejecución: Bases de datos grandes pueden requerir aumentar el
max_execution_timeen PHP o usarnicepara priorizar. - Documenta todo: Anota usuarios, contraseñas y rutas para futuras referencias.
[TIP] Si tu hosting usa Syspanel, recuerda que puedes gestionar las bases de datos desde el panel (puerto 2106). Allí también puedes crear usuarios y asignar permisos fácilmente.
Preguntas frecuentes (FAQ)
¿Puedo migrar sin SSH?
Sí, usando herramientas como phpMyAdmin (exportar/importar), pero SSH es más rápido y seguro para bases de datos grandes.
¿Qué pasa si la base de datos tiene muchas tablas?
mysqldump maneja bien bases de datos grandes. Si es enorme (varios GB), considera dividirla en partes con --where o usar mysqlpump.
¿Cómo migrar solo algunas tablas?
Usa mysqldump con la opción --tables:
mysqldump -u usuario -p mi_basedatos tabla1 tabla2 > parcial.sql
¿Necesito detener el sitio web durante la migración?
Idealmente sí, para evitar cambios en los datos. Puedes poner el sitio en modo mantenimiento o usar --lock-tables para evitar escrituras.
¿Funciona en cualquier hosting?
Sí, siempre que tengas acceso SSH y MySQL. En algunos hosting compartidos puede estar restringido; consulta con tu proveedor.
Conclusión
Migrar una base de datos MySQL entre servidores usando comandos SSH MySQL es un proceso directo si sigues estos pasos: exportar con mysqldump, transferir con scp e importar con mysql. Recuerda siempre verificar los datos y tener un plan de respaldo.
No temas equivocarte; la práctica hace al maestro. Si tienes dudas, vuelve a leer esta guía o contacta a tu soporte técnico. ¡Buena suerte con tu mover base de datos MySQL!
[INFO] Recuerda: en Syspanel, el acceso es por el puerto 2106. Si necesitas ayuda con la configuración de usuarios o bases de datos, allí puedes hacerlo de forma gráfica.
Espero que este artículo te haya sido de gran ayuda. Si te quedó alguna duda, déjala en los comentarios y con gusto te asistiré. ¡Hasta la próxima!
