Diagnóstico y reparación de mensajes «MySQL Server ha desaparecido»

A todos nos gusta cuando los mensajes de error son descriptivos y dan una idea clara de lo que está sucediendo; sin embargo, hay algunos casos en los que un mensaje de error se encuentra detrás de algunas posibles razones. «El servidor MySQL se ha ido» es uno de ellos. La mayoría de los casos en los que se encuentra el error son descrito en la documentación de MySQL, pero puede resultar difícil. Y aquí, me gustaría hablar de «engañoso».

Solo hay algunos casos importantes en los que esto sucede:

1. Un administrador o una utilidad como pt-kill ha eliminado el hilo de MySQL

La intervención manual es probablemente intermitente y, como ocurre una vez en determinadas situaciones (p. Ej., Una solicitud incorrecta durante mucho tiempo), probablemente un DBA la conocería. Pt-kill podría ser menos notorio, ya que a menudo se deja funcionando como una solución alternativa para evitar esas malas demandas a largo plazo del sistema tributario. recursos. Verificar la lista de procesos del sistema debería traer los comandos a la superficie:

Una forma muy conveniente es utilizar el complemento de auditoría disponible para Percona Server para MySQL para determinar de dónde proviene el comando kill:

Muestra el nombre de host, el nombre de usuario y la hora en que se interrumpió la conexión.

2. Fragmento de transferencia de Big Data

Por ejemplo, cuando se utilizan campos BLOB para almacenar datos binarios en una tabla o hay una instrucción INSERT que contiene muchas filas. Puede suceder cuando se usa el cliente CLI de MySQL (uno de los casos que carga un volcado SQL), o puede ocurrir en una aplicación cuando se intenta almacenar datos BLOB (por ejemplo, desde un archivo de carga).

Existe un límite que MySQL impone a la cantidad de datos que se pueden transmitir por solicitud, y max_allowed_packet una variable para definir.

Entonces, en ambos casos, necesitamos determinar en qué tabla se escriben los datos, por ejemplo, haciendo grepping en el archivo SQL para las instrucciones INSERT INTO e implementando el registro al final de la aplicación. De esta forma, la declaración se mantendrá con el error que impidió completarla. Se puede capturar una declaración parcial (ya que BLOB podría ser una carga de registro), pero siempre que haya un nombre de tabla, es posible verificar la estructura de la tabla y ver si contiene datos binarios.

Ejemplo de una instrucción INSERT con datos binarios truncados:

Para permitir una mayor ejecución de consultas, se debe agregar la variable:

La variable se puede configurar por sesión o en todo el mundo, según el caso de uso.

3. La conexión ha sido cerrada por Timeout.

Es trivial, pero las aplicaciones pueden reutilizar conexiones ya establecidas. Durante el tiempo de inactividad o bajo tráfico, es posible que algunas conexiones no se utilicen por un tiempo y se cierren al final de MySQL. Se rastrea mejor con el registro de aplicaciones; si hay un evento que sucedió en la noche seguido de un período de inactividad y luego el error en la mañana, es muy probable que MySQL haya cerrado la conexión.

Espere 5 segundos:

Por lo general, la conexión se restablece y la aplicación continúa con su funcionamiento normal; pero aún es posible extender el tiempo de espera en la configuración de MySQL:

El valor predeterminado de la variable es 28800 segundos (8 horas), que es suficiente en la mayoría de los casos.

Además, el cierre ordenado de las conexiones desde un extremo de la aplicación, después de un período de inactividad, elimina este problema.

4. El servidor MySQL ya no existe.

Este es probablemente el peor de los casos cuando MySQL se bloquea en una consulta o por alguna otra razón, por ejemplo, el asesino de OOM eliminó el proceso. Sin embargo, también puede deberse a un reinicio limpio.

En este caso, se debe verificar el tiempo de actividad de MySQL y los registros, el registro de errores de MySQL y el syslog. Deben indicar si se ha reiniciado el servidor y si hubo un error que provocó el reinicio.

En caso de que el servidor falle, es hora de encontrar la causa real. Verifique el rastreador de errores, ya que es posible que el problema ya se haya informado y se haya solucionado; actualice MySQL si es necesario. En caso de que haya sido un reinicio limpio, verifique si las actualizaciones automáticas están habilitadas o si alguien más ha reiniciado el servicio de forma interactiva (sí, la falta de comunicación también es un problema).

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario