X

Cómo solucionar el error Mysql Server has gone away en WordPress

Bueno, realmente me he fijado en este pequeño error que devuelve mysql usando WordPress, pero puede aparecer en cualquier plataforma CMS o también si haces tus scripts a medida. En cualquier caso vamos a ver cómo arreglar Mysql Server has Gone Away.

En el caso específico de que estés utilizando WordPress, seguramente te habrás encontrado en los logs de error uno similar a este:

PHP message: Error MySQL server has gone away de la base de datos de WordPress para la consulta UPDATE `wp_options` SET `option_value` = ‘a:7648:{i:4024780a;a:1:{s:29:\\»ngg_delete_expired_transients\\»;a:1:{s:32:\\»4024780a\\»;a:3:{s:8:\\»schedule\\»;s:6:\\»hourly\\»;s:4:\\»args\\»;a:0:{}s:8:\\»interval\\»;i:3600;}}}i:4024780a;a:1:{s:19:\\»nxs_querypost_event\\»;a:1:{s:32:\\»4024780a\\»;a:3:{s:8:\\»schedule\\»;s:11:\\»nxsreposter\\»;s:4:\\»args\\»;a:0:{}s:8:\\»interval\\»;i:90;}}}i:4024780a;a:1:{s:16:\\»nxs_hourly_event\\»;a:1:{s:32:\\»4024780a\\»;a:3:{s:8:\\»schedule\\»;s:6:\\»hourly\\»;s:4:\\»args\\»;a:0:{}s:8:\\»interval\\»;i:3600;}}}i:4024780a;a:3:{s:16:\\»wp_version_check\\»;a:1:{s:32:\\»4024780a\\»;a:3:{s:8:\\»schedule\\»;s:10:\\»twicedaily\\»;s:4:\\»args\\»;a:0:{}s:8:\\»interval\\»;i:43200;}}s:17:\\»wp_update_plugins\\»;a:1:{s:32:\\»4024780a\\»;a:3:{s:8:\\»schedule\\»;s:10:\\»twicedaily\\»;s:4:\\»args\\»;a:0:{}s:8:\\»interval\\»;…

Por qué ocurre el error Mysql Server has gone away

Este problema puede venir provocado por diversos motivos, entre los más comunes que serán los que vamos a solucionar aquí están que el servidor mysql (o mariadb) cierra la conexión por que la conexión hah caducado, y por otro lado que hemos enviado al servidor una consulta muy larga o incorrecta contra la base de datos.

Este último dependerá del tamaño de la consulta y de la limitación que tengamos configurada en el mysql de nuestro servidor. Para cualquiera de los dos casos vamos a tener que tocar el my.cnf por lo que tendremos que tener permisos de administración en nuestro servidor. De no ser así podemos ponernos en contacto con el hosting y preguntarles si es posible configurar esos valores.

Cómo solucionar el error Mysql Server has gone away

Ahora sí que ya nos ponemos en materia, teniendo clara la conexión al servidor, nosotros lo vamos a hacer mediante ssh, pero hay paneles de control que nos permiten modificar este archivo directamente desde la administración.

Primer caso, conexión caucada

Este es de los dos casos el menos probable, más que nada por que la conexión predeterminada que se queda configurada al instalar mysql es de 8 horas, o de 28800 segundos, por lo que sería difícil que una consulta pierda conexión y nos devuelva el error. Esto sí ocurriría si este parámetro está reconfigurado y tiene un valor demasiado bajo. También lo notaremos en que tarda unos segundos o minutos en devolvernos el error a la hora de cargar la página.

  • Editaremos el archivo my.cnf
  • En la sección de [mysqld] añadiremos o modificaremos las siguientes líneas
    wait_timeout = 28800
    interactive_timeout = 28800
  • Las pondremos con el valor en segundos que creamos conveniente para que no se corte la conexión.
  • Reiniciaremos el servicio mysql (o mariadb)
    service mysqld restart
    
    o
    service mariadb restart

Ten en cuenta que si el valor existe y es muy bajo (menos de 60 segundos) estaría dentro de unos márgenes aceptables, y si es posible deberías revisar la programación del script que estás ejecutando. En caso contrario ahí he puesto los valores predeterminados, pero puedes ajustarlo a los segundos que te funcionen.

Segundo caso, consulta muy larga

En este otro caso que posiblemente será el que te está dando problemas, sobretodo si el error mysql has gone away aparece con WordPress, será por las consultas largas que se ejecutan sobre la tabla wp_options por alguno de los plugins normalmente. Este parámetro cuando no está definido de forma predeterminada se ajusta a 1M (un mega), por lo que a poco que se extienda nuestra consulta o se haga sobre un campo longtext con bastante contenido nos dará este error. Para arreglarlo haremos lo mismo que antes, editar el archivo my.cnf:

  • Editamos el archivo my.cnf
  • En la sección [mysqld] agregaremos esta línea (o la editamos)
    max_allowed_packet = 128M
  • Guardaremos el archivo y reiniciaremos mysql
    service mysqld restart
    
    o
    service mariadb restart

En el ejemplo lo pongo a 128M (megas), pero podemos ir probando de subirlo por ejemplo a 4M, 8M,10M, etc y ver si deja de aparecer el error. En sistemas con pocos recursos no es demasiado recomendable permitir consultas excesivamente grandes para que no caiga el rendimiento del mismo.

¿Usas WordPress? ¿Te has encontrado con algún problema más?

VicHaunter:
    Categorías: Ayuda

Ver comentarios (4)

  • Disculpen yo utilizo MariaDB con base de Datos MYSQL y cuando cambio el valor de las variables wait_timeout y reinicio el Servicio de Mysql me vuelve a restablecer el valor por defecto que tenia antes de que lo cambiara.

    • Prueba a poner un valor más bajo y reiniciar el servicio, a ver si te acepta el cambio poniendo algo como 500 u 800.

  • Disculpen yo utilizo MariaDB con base de Datos MYSQL y cuando cambio el valor de las variables wait_timeout y reinicio el Servicio de Mysql me vuelve a restablecer el valor por defecto que tenia antes de que lo cambiara.

Artículo relacionado
Los comentarios de Disqus están cargando....

Como todos, usamos cookies.