Una importación grande a través de una interfaz web casi siempre falla: el límite de subida, el tiempo de ejecución o el plazo de la petición la detienen a medio camino. Importa desde la línea de órdenes y nada de eso se aplica.
mysql -u user -p dbname < dump.sql
# or, compressed
zcat dump.sql.gz | mysql -u user -p dbname
Hazla rápida
# at the top of the session
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
-- import --
SET foreign_key_checks=1;
SET unique_checks=1;
COMMIT;
La mayor parte del tiempo de una importación grande se va en comprobar restricciones y escribir a disco tras cada fila. Desactivar eso para un volcado de confianza y volver a activarlo después convierte horas en minutos de forma habitual.
Solo con un volcado del que te fíes y en una base en la que no esté escribiendo nada más. Con las comprobaciones de claves ajenas desactivadas, un volcado roto importa datos rotos en silencio.
Mírala avanzar
pv dump.sql | mysql -u user -p dbname
pv muestra una barra de progreso y una estimación. Sin ella, una importación larga no se distingue de una colgada, y la gente la mata a medias, que es peor que esperar.
Si falla a medio camino
- Sin espacio en disco: la base necesita sitio para los datos Y para los archivos temporales. Comprueba
df -hantes de empezar. - MySQL server has gone away: una sola fila mayor que max_allowed_packet. Súbelo:
max_allowed_packet = 256M. - Unknown collation: el volcado viene de un MySQL más reciente. O actualizas, o reescribes el cotejo dentro del archivo.
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' dump.sql
Importa en una base vacía, no encima de una en producción. Si falla a medias tendrás una copia a medio importar que tirar, en lugar de un sitio a medio destruir.