Error general: el servidor MySQL 2006 se ha ido [cerrado]

8

Este es el error que de repente recibo.

Additional uncaught exception thrown while handling exception.

Original
PDOException: SQLSTATE[70100]: Unknown error: 1317 Query execution was interrupted...my query

Additional
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away...my query

Después de investigar un poco, parece que un módulo personalizado, que he hecho, está intentando una consulta que es demasiado grande. Una solución que parece funcionar para mucha gente es esta:

  1. Abra my.ini
  2. Cambie "max_allowed_packet" de "1m" a "16m" (o más grande)
  3. Guarde my.ini y reinicie MySQL

Sin embargo, estoy en un servidor compartido, por lo que no puedo editar my.ini, y aunque mi proveedor me ha confirmado que el valor está establecido en 1M, no lo aumentarán.

También intenté agregar esto: ini_set('mysqli.reconnect', 'on');a settings.php. No resolvió el problema.

¿Alguien sabe de otra solución, o evitar?

Gracias.

dbj44
fuente
Duplicado de error general
kenorb

Respuestas:

8

Las empresas de alojamiento compartido no regalan el privilegio SUPER . Si lo tiene, puede configurar fácilmente max_allowed_packet a 512M simplemente ejecutando esto:

mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 512;

No se requiere reiniciar. Luego, todas las conexiones entrantes pueden tener un paquete de 512M .

No puedes hacer esto:

mysql> SET max_allowed_packet = 1024 * 1024 * 512;

porque obtienes

ERROR 1621 (HY000): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value

La única alternativa que se me ocurre es cambiar a Amazon EC2 e instalar MySQL allí. De esa manera, puede tener rienda suelta para editar my.cnf / my.ini y tener el privilegio SUPER .

RolandoMySQLDBA
fuente
0

Le pedí a mi proveedor que aumentara el valor, pero no lo hicieron. Puedo entender por qué, son un negocio y quieren que pague 29,99 al mes por un servidor dedicado, en lugar de 4,99 por un servidor compartido.

Sin embargo, hay una solución: identificar la consulta que es demasiado grande y dividirla en dos o más partes. Dividí mi consulta de problema a la mitad: problema resuelto. Ineficiente, sí, pero es mejor que mi sitio no funcione en absoluto o tenga que pagar el extra.

dbj44
fuente
Tenga en cuenta lo que dije sobre los paquetes MySQL ( superuser.com/a/273833/76764 ) Los sospechosos habituales que pueden obstruir un paquete MySQL son grandes campos TEXT / BLOB. Por lo tanto, es posible que desee pensar en comprimir su TEXT/BLOB fieldscódigo de aparejo jerry.
RolandoMySQLDBA
Sí, tal vez ese puede ser el problema, pero aunque mi consulta SELECT fue relativamente compleja, el conjunto de resultados devuelto fue de unos pocos cientos de caracteres de texto.
dbj44
2
Puede comenzar a tener problemas con las tablas de caché haciendo INSERTs que son bastante grandes. Su solución no funcionará aquí, ni en ningún otro lugar donde Drupal esté haciendo la consulta.
mpdonadio
No es un INSERT, solo una consulta SELECT con aproximadamente 25 uniones. Todo hecho con el generador de consultas. ¿Sabes por qué esto causaría tal error? Hacer INSERT a través de un controlador de envío de formularios no es un problema.
dbj44
0

El problema es porque max_allowed_packetlo configuras con mayor valor.

Cómo solucionar este problema (si está en Windows y usa xamp, busque el archivo my.ini)
Vaya a xampp \ mysql \ bin
Abra my.ini
Cambie "max_allowed_packet" de "1m" a "16m"
Guarde my.ini
Ahora reinicie MySql a través del panel de control XAMPP.

Encontré esta solución aquí. http://minorpoint.blogspot.com/2007/09/mysql-server-has-gone-away.html

Yusef
fuente