Archivos de Tags: gone away @es

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