Solucionar ERROR 2006 (HY000) at line ###: MySQL server has gone away

Una vez tuve un proyecto con una tabla en MySQL que tenía más de 2 millones de filas. La primera vez que intenté mover dicho proyecto de un ordenador a otro me salió el error “ERROR 2006 (HY000) at line ###: MySQL server has gone away” en el momento de restaurar la base de datos. Después de MUCHO tiempo investigando por internet mi compañero y yo encontramos que el problema radicaba en 2 partes:

  • Algunas sentencias largas excedían el tamaño de max_allowed_packet
  • mysqldump estaba creando unas sentencias insert extremadamente largas por culpa de esta tabla gigante

Solucionar el primer problema era fácil: sólo había que incrementar el valor de max_allowed_packet en my.cnf del servidor destino:

[mysqld]
max_allowed_packet = 16M

Para resolver el segundo problema usamos la opción --skip-extended-insert de mysqldump. La contrapartida de usar esta opción es que los dumps generados son mucho más voluminosos y que tardan mucho más en restaurarse. Puedes ver en este post de High Availability MySQL blog unos test donde se ve que no usando la opción --skip-extended-insert para una tabla de unas 16 millones de filas se tardan 170 segundos mientras que usando la opción se tarda al rededor de 1.100 segundos. Casi 7 veces más.

Recuerda que --opt es la opción por defecto en mysqldump y que al final se traduce por:

--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset

Esta es la razón por la que usamos --skip-extended-insert para sobreescribir la opción --extended-insert quedando al final el comando myslqdump por ejemplo así:

$ mysqldump --add-drop-table --skip-extended-insert --skip-quick -u user_name -p database_name | gzip > database_name_`date +%Y%m%d_%H%M%S`.sql.gz

mysql

Ref: http://dba.stackexchange.com/questions/5292/mysql-server-has-gone-away-obstructing-import-of-large-dumps
http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html

You might also like

Change root password in MySQL
In GNU/Linux:$ sudo mysqld_safe --skip-grant-tables & $ mysql -u root -p #press enter to use a...

Evitar temporalmente el error MySQL “Cannot delete or update a parent row: a foreign key constraint fails”
mysql> SET foreign_key_checks = 0; mysql> DROP table ...; mysql> SET foreign_key_checks = 1;Ref:...

MySQL no arranca después de actualizar de la versión 5.1 a la 5.5
Después de actualizar un servidor de MySQL de la versión 5.1.73 a la 5.5.4 dejó de arrancar. Para...

Cambiar contraseña de root en MySQL
En GNU/Linux:$ sudo mysqld_safe --skip-grant-tables & $ mysql -u root -p #pulsar enter para meter...

Dejar un comentario?

0 Comentarios.

Deje un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.