Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Migrar grandes (y pequeñas) bases de datos, fácilmente y sin limitaciones, usando la línea de comandos

Imago voragine.net
[actualizado el ]

Si se tiene acceso SSH al servidor donde queremos migrar la base de datos, recomiendo hacerlo usando únicamente comandos. La línea de comandos nos evita lidiar con las limitaciones de PHPMyAdmin, el servidor web o el navegador. Por mi experiencia, tras probar otros métodos para migrar grandes bases de datos, he comprobado que hacerlo en la línea de comandos es la manera más segura y rápida.

Voy a suponer que se tiene la base de datos en un archivo SQL, que se ha descargado a una máquina local desde el servidor remoto.

Crear la base de datos en el servidor

Antes de migrar los datos que contiene el archivo SQL, tenemos que crear la base de datos en el servidor, y un usuario con los privilegios suficientes para poder manejarla. Para ambas tareas podemos usar el comando mysql, sustituyendo las expresiones entre corchetes por los valores reales, y prestando atención a que después del modificador p y su valor, no hay espacio.

$ mysql -u [mysql-admin-username] -p[mysql-admin-pass] -e "CREATE USER '[username]'@'localhost' IDENTIFIED BY '[user_pass]'; GRANT USAGE ON * . * TO '[username]'@'localhost' IDENTIFIED BY '[user_pass]';"

Ahora creamos la base de datos:

$ mysql -u [mysql-admin-username] -p[mysql-admin-pass] -e "CREATE DATABASE IF NOT EXISTS [database_name] DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL PRIVILEGES ON [database_name] . * TO '[username]'@'localhost';"

Supongo que la base de datos que queremos migrar tiene un juego de caracteres UTF8; por eso creamos la nueva base de datos con esa codificación. Si tuviera otra, habría que cambiar los parámetros CHARACTER SET y DEFAULT COLLATE`.

Pablo me comenta que el modificador -p para introducir la contraseña le da problemas con la sintaxis planteada aquí. Como alternativa se puede omitir y dejar que el comando mysql nos pida la contraseña.

Esto lo podemos hacer mediante PHPMyAdmin o la interfaz web que nos ofrezca nuestro proveedor de alojamiento.

Copiar al servidor el archivo que contiene la base de datos

Para que la transferencia del archivo lleve menos tiempo, comprimimos previamente el archivo SQL, con un programa que también tengamos en el servidor ya que en él tendremos que descomprimirlo. Yo uso en este caso bzip2 porque no duplica el archivo al comprimirlo, en su comportamiento por omisión:

$ bzip2 data.sql

Ahora podemos copiar el archivo data.sql.bz2 al servidor de destino. Para ello podemos usar scp, que copia usando el protocolo SSH:

$ scp data.sql.bz2 [username]@[hostname]:[PATH]

Por ejemplo, supongamos que el nombre de usuario es admin, el hostname es example.net y lo queremos colocar en la carpeta personal del usuario:

$ scp database.sql.bz2 admin@example.net:/home/admin/.

Importar la base de datos al servidor mysql

Tras iniciar sesión SSH en el servidor de destino, descomprimimos el archivo data.sql.bz2 que hemos copiado:

$ bunzip2 data.sql.bz2

Después podemos usar de nuevo el comando mysql para añadir los datos que contiene el archivo a la base de datos que creamos en el primer paso:

mysql -u [username] -p -h localhost [database_name] < data.sql [/code]

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks