2010-04-06 9 views
6

Tengo un MySQL que se fue con Django bajo WSGI. Encontré entradas para este problema en stackoverflow, pero nada con Django específicamente. Google no ayuda, excepto por 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 reconectarse si el servidor colgó la conexión, pero esto no sucede. ¿Cómo puedo resolver este problema sin soluciones temporales?(2006, 'servidor MySQL se ha ido') en WSGI django

+0

¿Están el servidor web y MySQL en la misma máquina? De lo contrario, cuanto más cerca estén, menos probable será que un problema de red provoque que el servidor se "vaya". – lexu

+0

@lexu sí lo son. –

+0

seleccione la versión(); mostrar la lista de procesos; mostrar variables como '% max%; Por favor, pegue el resultado: – iddqd

Respuesta

3

show variables like 'wait_timeout';

Ésta es la configuración les devolverá los "mysql desaparecido" error
se establece en un valor muy grande para evitar que
o simplemente re-ping a la conexión de MySQL después de que "ha ido lejos" cierto período

+0

bueno, ahora cambié de trabajo, así que no puedo probarlo, pero espero que sea correcto :) –

1
  • se puede crear middleware de ping() la conexión de MySQL (que se volverá a conectar si tiempo de espera) antes de procesar la vista

  • También podría agregar middleware para capturar la excepción, volver a conectar y volver a intentar la vista (creo que preferiría la solución anterior como más simple, pero técnicamente debería funcionar y ser eficiente asumiendo que los tiempos de espera son excepcionales). Esto también asume un punto de vista no tiene ningún efecto secundario, que es una propiedad deseable, pero puede ser difícil de hacer, especialmente si se escribe a un sistema de archivos, así como una base de datos en la vista.)

0

desarrolladores de Django dieron una respuesta corta para todas las preguntas como esta en https://code.djangoproject.com/ticket/21597#comment:29

  • Resolution set to wontfix

Actually this is the intended behavior after #15119. See that ticket for the rationale.

If you hit this problem and don't want to understand what's going on, don't reopen this ticket, just do this:

  • RECOMMENDED SOLUTION: close the connection with from django.db import connection; connection.close() when you know that your program is going to be idle for a long time.

  • CRAPPY SOLUTION: increase wait_timeout so it's longer than the maximum idle time of your program.

In this context, idle time is the time between two successive database queries.

Cuestiones relacionadas