Importar bases de datos MySQL demasiado grandes [RESUELTO]

Las migraciones tienen algo curioso: en teoría no deberían suponer mayor problema y son un proceso sencillo, pero en la práctica casi siempre pasa algo que nos lo complica. Hoy hablaremos de uno de estos problemas: las bases de datos MySQL demasiado grandes.

En qué consiste el problema de las bases de datos MySQL demasiado grandes

A principios de este mes varios de mis clientes decidieron migrar algunas de sus webs a nuevos servidores de hosting. Hasta ahí todo bien, y es uno de los servicios que presto como freelancer. Sin embargo, varias de esas webs eran tiendas online con muchos productos, o blogs con demasiados post y por una razón u otra pesaban más del límite que tenía configurado el phpMyAdmin de destino. ¿Qué podemos hacer?

En este post te voy a dar tres posibles soluciones a este problema para que puedas aplicar según cuál sea tu caso. Te adelanto que mi favorita es la tercera, pero si conoces las otras dos puedes ahorrar bastante tiempo. También depende un poco del tipo de servidor en el que estés trabajando el usar una u otra.

Aumentar el tamaño de archivos soportado por phpMyAdmin

Si tu hosting es un servidor dedicado, o un VPS y tienes permisos de superadministrador muchas veces es más sencillo agrandar el agujero de engrasar lo que quieres meter y andar haciendo cosas raras para que el archivo pase.

¿Cómo hacemos esto? Simplemente modificando el tamaño máximo de subida de PHP. Para esto entraremos desde consola, nos haremos root con el «sudo su» y modificaremos con nuestro editor favorito, en mi caso NANO.

nano /etc/php/7.0/apache2/php.ini

Ten cuidado, porque esta ruta podría variar de un sistema operativo a otro, o de una versión de Apache a otra… etc, estas cosas son así de simpáticas. Pero es un buen punto de partida.

Dentro de ese archivo vamos a buscar dos parámetros que tenemos que editar:

  • post_max_size Define el tamaño máximo permitido de datos de subida de ficheros por POST. Para subir ficheros grandes, este valor debe ser mayor que upload_max_filesize.
  • upload_max_filesize Es el tamaño máximo de un fichero subido

Una vez editados los dos parámetros para que se ajusten con algo de holgura al archivo que queremos subir, guardamos los cambios y reiniciamos el Apache con un comando como:

/etc/init.d/apache2 restart

o en CentOS

service httpd restart

¿Ves lo que te decía de que los comandos varían de una distribución de GNU/Linux a otra? Si el servidor en Windows ni te molestes en intentarlo y corre con todas tus fuerzas a la tercera solución.

Importar la base de datos por SSH

Pero imagina que no tienes poderes de supervaca, pero si tienes un humilde acceso SSH al servidor. En ese caso puedes hacer otra cosa, y es saltarte la subida del archivo a través de la interfaz haciendo la importación a través de consola. Es más sencillo de lo que parece, y a mi me ha salvado un par de veces de tener dolores de cabeza por una migración.

Generalmente, cuando la base de datos pesa más de 50MB los manuales de MySQL recomiendan, de hecho, hacerlo de esta manera, por lo que no estamos haciendo nada fuera de lo ortodoxo. En los comandos que te voy a poner (sacados de fuentes oficiales) debes sustituir USERNAME por el usuario con permisos sobre la base de datos y DATABASE por el nombre de la base de datos. Lo digo porque no hace mucho me encontré un caso de alguien que había copiado y pegado tal cual «pontudominioaqui.com» en un proceso cron…

AVISO IMPORTANTE: Como entiendo que sabes usar SSH (que no es otra cosa que línea de comandos de Linux) y que si no lo sabes hacer vas a saltar hasta la solución número 3, voy a ir ligerito con lo que hay que hacer. Si te pierdes en algún paso, es mejor que vayas a la solución 3, porque aquí podrías tocar cosas que te den problemas mayores que resolver.

1. Subimos el archivo .sql a importar a una carpeta del servidor (da igual cual) mediante FTP. Para subirlo por FTP te recomiendo un programa como Filezilla, que es gratuito. Vamos a suponer que el archivo se llama backup.sql de aquí en adelante, pero le puedes poner el nombre que quieras.

2. Entramos a la consola y nos vamos a la ruta determinada (con el comando «cd RUTA»). Una vez dentro haremos un «dir» o un «ls» (lo que prefieras) para asegurarnos de que el archivo está en posición y no estamos haciendo el idiota.

3. Utilizaremos el comando mysql para realizar la importación, de la siguiente manera:

mysql -uUSERNAME -p DATABASE < backup.sql

Te va a pedir una contraseña, sera la contraseña del usuario que hemos puesto en USERNAME. Si todo está correcto, podrás entrar vía phpMyAdmin y comprobar que todo está en su sitio. ¿Problema con el tamaño de subida de PHP? ¿Donde? XD

Partir la base de datos en trozos más pequeños e importarlos uno a uno

Este es un método que tiene dos variantes, la primera no te la recomiendo a menos que sea tu última opción. La segunda en cambio es apta para todos los públicos.

Variante uno: hacerlo a mano mediante fuerza bruta

No lo recomiendo, porque es muy frustrante y tedioso, pero conviene que lo sepas porque a mi me ha salvado un par de cosas en alguna ocasión. Se trata de abrir el archivo .sql con tu editor de código de confianza (en mi caso notepad ++), copiar en el portapapeles todo lo que te encuentras ahí y pegarlo en la pestaña «SQL» del phpMyAdmin para a continuación ejecutarlo. Hay veces que cuela y te lo importa.

Si no cuela, puedes irlo copiando y pegando a trozos. Si entiendes un poco de lenguaje SQL veras que cada X líneas crea las distintas tablas y  hace «insert into». Esos puntos son por los que lo puedes partir e ir pegando. Eso si, te puede llevar horas y no lo recomiendo. Además es un proceso bastante frustrante.

Variante dos: utilizar un programa gratuito que hace el trabajo sucio por ti

Pero ¿Y si un robot pudiera hacer ese trabajo sucio de partir a cachitos la base de datos por ti? ¡Tengo un regalo para ti! Tengo ese robot, y lo mejor de todo es que es gratis.

Se trata de un programita muy sencillo llamado SQLDumpSplitter2. Es muy fácil de usar y es tan simple como buscar el archivo, elegir el tamaño de los trozos, elegir donde quieres que te vuelque el resultado, y darle a un botón.

Lo puedes dercargar comprimido en .rar y comprimido en .zip gracias a János Rusiczki que hizo este post sobre el tema en inglés donde hay algunas opciones más. Cabe destacar que el autor original del programa es Philip Lehmann-Böhm.

Este software me ha salvado migraciones complicadas en cuestión de minutos desde que lo conocí… por eso es mi solución favorita para este tipo de casos, y la que considero más sencilla.


Espero que te haya resultado útil este amplio tutorial. ¿Te has visto en una situación así? Hazme saber en los comentarios cómo llegaste hasta aquí, y si te puedo ayudar con contenidos sobre algún otro tema. También sería genial que me ayudaras a darle difusión a este post. ¡Hasta pronto!