Solución al error "mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table"

Si estamos intentando exportar en MySQL una base de datos de gran volúmen, o una base de datos no muy voluminosa, pero con una tabla muy grande en un servidor limitado en cuanto a memoria, es muy probable que nos acabemos por encontrar el siguiente error:

mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table

Este problema se produce porque MySQL carga por defecto la tabla completa antes de exportarla (si es un export de una base de datos completa, lo hace tabla a tabla), y en ocasiones la memoria disponible en el servidor no es suficiente.

La solución es muy simple, es utilizar la opción --quick o -q para que MySQL exporte fila a fila en lugar de meter en buffer toda la tabla y agotar la memoria. Ver documentación.

Ejemplo:

mysqldump -u usuario -p -q nombre_bbdd > bbdd.sql

Más información en este post de Jeremy Zawodny.

Comentarios

Alguna vez le pasó a un compañero y no supe que decirle (tampoco me puse a fondo a ver que pasaba). Le voy a pasar el link de esta pagina ;)

No me funcionó. Con un max_allowed_packet alto (mysqldump --opt --max_allowed_packet=128M ...) tampoco.
Leí que puede que tenga que ver con VMs de tamaño dinámico, mejor de tamaño fijo...
http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

Gracias por el post. Yo también me he encontrado con este problema y la solución no ha sido exactamente la que sugieres en tu post, por eso me he animado a comentar.

Mi solución es una mezcla entre tu post y el comentario de Pablo. En el comentario de Pablo se sugiere limitar el tamaño máximo de paquete (con --max_allowed_packet=128M) pero usando el parámetro --opt (que de por sí incluye la opción --quick y que por tanto deshabilita el buffering, por eso le falla, aunque iba bien encaminado).

Para poder hacer el backup sin errores, he tenido que utilizar el parámetro --skip-quick de la siguiente manera:
mysqldump --single-transaction --opt --skip-quick --max_allowed_packet=128M ...

Como ves, también he utilizado el parámetro --single-transaction para evitar problemas de modificación de la base de datos mientras se realiza el backup (tal como se sugiere en el manual).

Gracias a todos y espero que os resulte útil el apunte.

No funciono en mi caso gracias cualquier persona que lo sepa por favor un andresgarcia0313 otmail.com

tras variados errores, la combinación que me ha funcionado a mí:

mysqldump --single-transaction -q --max_allowed_packet=128M --lock-tables=false database_name

En mi caso no es lo mismo, pues de hecho no estoy exportando la base de datos sino ejecutando un query y de todas maneras me salió este error.

Sugerencias?

graicas Pedro, en efecto con el single me pudo hacer la operacion sin problema, con el -q no avanzo la tabla.
al poner todo, funciono muy bien

Añadir nuevo comentario