La forma más rápida de migrar bases de datos MySQL a otro servidor con Mysqldump

Migrar una base de datos MySQL a otro servidor puede ser un desafío, especialmente si buscas un tiempo de inactividad mínimo y un rendimiento rápido.

Una de las herramientas más populares para realizar esta tarea es mysqldump, una utilidad proporcionada por MySQL para realizar copias de seguridad y restaurar bases de datos. En este artículo, te guiaremos en el uso de mysqldump para migrar tu base de datos y crear un script para automatizar el proceso.

Migrar bases de datos MySQL a otro servidor y clonar los datos.

Requisitos previos

  • Servidores de origen y destino con MySQL instalado
  • Credenciales de root de MySQL o una cuenta con privilegios suficientes en ambos servidores
  • Acceso SSH a ambos servidores o el servidor de la DB debe permitir conexiones entrantes (si no está en la misma máquina)

Exportar la base de datos usando mysqldump

El primer paso en el proceso de migración es crear una copia de seguridad de la base de datos de origen. Para ello usaremos mysqldump. Mysqldump crea un script SQL que contiene todos los comandos necesarios para recrear la estructura de la base de datos y los datos en el servidor de destino.

Inicia sesión en el servidor de origen y ejecuta el siguiente comando para crear una copia de seguridad comprimida de tu base de datos:

bash
mysqldump -u [username] -p --single-transaction --extended-insert --quick --lock-tables=false [database_name] | gzip > [backup_file].sql.gz

Reemplaza [username], [database_name] y [backup_file] con tu nombre de usuario MySQL, el nombre de la base de datos que quieres migrar y el nombre deseado del archivo de copia de seguridad, respectivamente.

Este comando usa la opción --single-transaction para garantizar la consistencia de los datos, --quick para reducir el uso de memoria, y –lock-tables=false para evitar el bloqueo de tablas durante el proceso de exportación.

El parámetro más importante es –extended-insert. Esto hará que la importación del archivo SQL exportado sea de 10 a 15 veces más rápida en el servidor de destino.

Transferir el archivo de copia de seguridad al servidor de destino

Después de crear la copia de seguridad, puedes importarla en el otro servidor de base de datos.

  • Copia el archivo gzip comprimido al servidor e impórtalo
  • Descomprime el archivo y cárgalo con MySQL vía SSH al servidor de la DB

Para transferirlo al servidor de destino, puedes usar una herramienta como SCP, SFTP o rsync. Por ejemplo, para usar SCP:

bash
scp [backup_file].sql.gz [destination_user]@[destination_ip]:/path/to/destination

Reemplaza [backup_file], [destination_user], [destination_ip] y /path/to/destination con los valores correspondientes.

Importar la base de datos en el servidor de destino

Una vez transferido el archivo de copia de seguridad, inicia sesión en el servidor de destino y ejecuta el siguiente comando para importar la base de datos:

bash
gunzip < [backup_file].sql.gz | mysql -u [username] -p [database_name]

Reemplaza [username], [database_name] y [backup_file] con tu nombre de usuario MySQL, el nombre de la base de datos que quieres migrar y el nombre del archivo de copia de seguridad, respectivamente.

Descargar el script de migración de la base de datos

Para automatizar el proceso de migración de la base de datos MySQL, puedes usar este script bash que utilizamos aquí en wp-staging.com para migrar nuestra base de datos a una DB administrada alojada en DigitalOcean. (Ya no se usa, ya que WP Staging ahora puede realizar la migración de la base de datos):

bash
#!/bin/sh
# migrate.sh

sourceUser=""
sourcePassword=""
sourceHostname=""
sourcePort=""
sourceDatabase=""

destinationUser=""
destinationPassword=""
destinationHostname=""
destinationPort=""
destinationDatabase=""

echo "Exporting $sourceDatabase database to ./wp-staging.com.sql"

start_export=`date +%s`

mysqldump -P $sourcePort -h $sourceHostname -u $sourceUser  -p$sourcePassword --set-gtid-purged=OFF --extended-insert --single-transaction --skip-lock-tables --column-statistics=0 $sourceDatabase > ./wp-staging.com.sql

# Done creating a dump of wp-staging.com

end_export=`date +%s`

echo "Database exported in" $((end_export-start_export)) "seconds"

echo "Importing Database to... "

start_import=`date +%s`

mysql -u $destinationUser -p$destinationPassword -h $destinationHostname -P $destinationPort $destinationDatabase < ./wp-staging.com.sql

# Done importing the dump to managed db

end_import=`date +%s`

echo "Database imported in" $((end_import-start_import)) "seconds"

echo "Total runtime: " $((end_export-start_export+end_import-start_import)) "seconds"

Reemplaza los valores de las credenciales de la base de datos en la parte superior del archivo con la información apropiada para tus bases de datos de origen y destino.

Antes de ejecutar el script, asegúrate de que las bases de datos de origen y destino sean accesibles.

A continuación, otorga permisos de ejecución al script:

bash
chmod +x migrate.sh

Ejecuta el script para realizar la migración:

bash
./migrate.sh

Este script exporta la base de datos de origen usando mysqldump, importa la base de datos en el servidor de destino usando el comando mysql y, finalmente, limpia eliminando el archivo de copia de seguridad.

Artículos relacionados

Rene Hermenau

Autor: Rene Hermenau

Sobre el autor: René Hermenau es el fundador de WP STAGING. Trabaja en copias de seguridad de WordPress, entornos de staging, migraciones, gestión de bases de datos y flujos de despliegue seguros.