Red de conocimiento informático - Conocimiento informático - Cómo solucionar que el servidor MySQL haya desaparecido

Cómo solucionar que el servidor MySQL haya desaparecido

ERROR MySQL: (2006, 'El servidor MySQL ha desaparecido') significa que el vínculo entre el cliente y el servidor MySQL está roto.

La razón de esto generalmente es que la operación SQL lleva demasiado tiempo o los datos transferidos son demasiado grandes (por ejemplo, la declaración que usa insert...values ​​​​es demasiado larga. En este caso, puede modificar el parámetro de configuración de max_allowed_packed. Para evitar esto, también puede insertar datos en lotes en el programa).

Hay muchas razones para este problema. Resumamos el análisis en Internet:

Razón 1. El servicio MySQL está inactivo

Hay muchas formas de juzgar. Si este es el motivo, ingresa a la consola MySQL y verifica el tiempo de ejecución de MySQL

mysqlgt; muestra el estado global como 'tiempo de actividad';

-------. ------- - ---------

| Nombre_variable |

-------------- - ------ ---

| Tiempo de actividad |

--------------- ------ ---

1 fila en conjunto o verifique el registro de errores de MySQL para ver si hay alguna información de reinicio

Si el valor de tiempo de actividad es grande, significa que el servicio mysql ha sido corriendo durante mucho tiempo. Significa que el servicio no se ha reiniciado recientemente.

Si no hay información relevante en el registro y significa que el servicio mysql no se ha reiniciado recientemente, puede continuar verificando los siguientes elementos.

Razón 2. Tiempo de espera de la conexión MySQL

Es decir, una determinada conexión larga de MySQL no inició una nueva solicitud durante mucho tiempo, alcanzó el tiempo de espera en el lado del servidor y fue forzada. cerrado por el servidor.

Cuando se inicien consultas posteriores a través de esta conexión, se informará el error del servidor ha desaparecido

(La mayoría de los scripts PHP entran en esta categoría)

mysqlgt; muestra variables globales como 'tiempo de espera';

---------------------------- ------- ---

| Nombre_variable | Valor |

---------------------------- ----------

| tiempo de espera de conexión | 10 |

| tiempo de espera de inserción retrasado 300 |

|

| innodb_rollback_on_timeout |

| tiempo de espera interactivo |

| lock_wait_timeout |

| >| net_write_timeout |

| esclavo_net_timeout |

| espera_timeout |

------------- --------------- ----------

10 filas en el conjunto

wait_timeout es 28800 segundos, que es mysql El enlace se cerró automáticamente después de 28800 segundos de inactividad

Razón 3. El proceso de enlace de solicitud de MySQL se eliminó activamente

Esta situación es similar a la razón 2, excepto que una es humana. made y el otro es el propio MYSQL.

mysqlgt; muestra el estado global como 'com_kill';

--------------- -- -----

| Nombre_variable | Valor |

--------------- -------

| Com_kill 21 |

--------------- -------

1 fila en el conjunto Razón cuatro Su declaración SQL era demasiado grande.

Este error también ocurrirá cuando el conjunto de resultados de la consulta exceda max_allowed_packet. El método de localización consiste en escribir la declaración de error relevante.

Utilice select * into outfile para exportar a un archivo y verifique si el tamaño del archivo excede max_allowed_packet. Si excede, debe ajustar los parámetros u optimizar la declaración.

mysqlgt; muestra variables globales como 'max_allowed_packet';

-------------------- ------ ---

| Nombre_variable | Valor |

-------------------------- -- ------ -

| max_allowed_packet |

------------------------ ----------

1 fila en el conjunto (0,00 segundos)

Modificar parámetros:

mysqlgt set global max_allowed_packet=1024 *1024*16;

mysqlgt; muestra variables globales como 'max_allowed_packet'

--------------------- ----- ----------

| Nombre_variable |

---------------- ---------- ----------

| max_allowed_packet | --------- ----------

1 fila en conjunto (0,00 seg)

Lo siguiente es un suplemento:

Las aplicaciones (como PHP) ejecutan lotes de declaraciones MYSQL durante mucho tiempo. Ejecute un SQL, pero la declaración SQL es demasiado grande o la declaración contiene campos BLOB o longblob. Por ejemplo, procesamiento de datos de imágenes. Es fácil que el servidor MySQL haya desaparecido.

Hoy me encontré con una situación similar. MySQL simplemente dijo fríamente: el servidor MySQL ha desaparecido.

Después de navegar por un tiempo, puede deberse principalmente a las siguientes razones:

Una posibilidad es que la declaración SQL enviada sea demasiado larga y exceda el tamaño de max_allowed_packet. Este es el caso La razón es que solo necesita modificar my.cnf y aumentar el valor de max_allowed_packet.

Existe otra posibilidad de que el tiempo de espera se deba a algunas razones. Por ejemplo, el método Singleton se utiliza para obtener la conexión de la base de datos en el programa. Aunque la base de datos está conectada varias veces, en realidad es la misma conexión. utilizado

Y el intervalo entre dos operaciones de base de datos en el programa excede el tiempo de espera (MOSTRAR

ESTADO puede ver esta configuración), entonces pueden ocurrir problemas. La forma más sencilla de solucionarlo es aumentar el tiempo de espera. Por supuesto, también puede utilizar mysql_ping() de vez en cuando en el programa, para que MySQL sepa que no está luchando solo.

La solución para el servidor MySQL ha desaparecido.

1. Las aplicaciones (como PHP) ejecutan lotes de declaraciones MYSQL durante mucho tiempo. El más común es la recopilación o conversión de datos nuevos y antiguos.

Solución:

Agregue o modifique las siguientes dos variables en el archivo my.cnf:

wait_timeout=2880000

interactive_timeout = 2880000

Para obtener instrucciones específicas sobre las dos variables, puedes buscar en Google o leer el manual oficial. Si my.cnf no se puede modificar, puede configurar CLIENT_INTERACTIVE al conectarse a la base de datos, por ejemplo:

sql = "set Interactive_timeout=24*3600"

mysql_real_query(.. .)

2. Ejecute un SQL, pero la declaración SQL es demasiado grande o la declaración contiene campos BLOB o longblob. Por ejemplo, procesamiento de datos de imágenes

Solución:

Agregue o modifique las siguientes variables en el archivo my.cnf:

max_allowed_packet = 10M (también puede establecer su propio tamaño requerido)

El parámetro max_allowed_packet se utiliza para controlar la longitud máxima de su búfer de comunicación.