(2006, 'el servidor MySQL se ha ido') en WSGI Django
-
24-09-2019 - |
Pregunta
Me he ido un mysql con Django bajo WSGI. Encontré entradas para este problema en StackOverflow, pero nada con Django específicamente. Google no ayuda, a excepción de las soluciones (como sondear el sitio web de vez en cuando, o aumentar el tiempo de espera de la base de datos). Nada definitivo. Técnicamente, Django y/o MySQLDB (estoy usando el último 1.2.3c1) deberían intentar una reconexión si el servidor colgaba la conexión, pero esto no sucede. ¿Cómo puedo resolver este problema sin soluciones?
Solución
show variables like 'wait_timeout';
Esta es la configuración que devolverá el error de "MySQL desaparecido"
Contácalo a un valor muy grande para evitar que "desaparezca"
o simple re-ping la conexión mysql después de cierto período
Otros consejos
Los desarrolladores de Django dieron una respuesta breve para todas las preguntas como esta en https://code.djangoproject.com/ticket/21597#comment:29
- Resolución establecida en wontfix
En realidad, este es el comportamiento previsto después del #15119. Vea ese boleto para la justificación.
Si toca este problema y no quieres entender lo que está pasando, no reabrieras este boleto, solo haz esto:
Solución recomendada: cierre la conexión con
from django.db import connection; connection.close()
Cuando sepa que su programa va a estar inactivo durante mucho tiempo.Solución de mierda: aumente Wait_TimeOut para que sea más largo que el tiempo de inactividad máximo de su programa.
En este contexto, el tiempo de inactividad es el tiempo entre dos consultas sucesivas de bases de datos.
Puede crear middleware para ping () la conexión mySQL (que se volverá a conectar si se agotó) antes de procesar la vista
También puede agregar middleware para captar la excepción, volver a conectar y volver Efectos, que es una propiedad deseable, pero puede ser difícil de hacer, especialmente si escribe en un sistema de archivos y en su DB en su opinión).