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]