(2006, 'MySQL server has gone away') in WSGI django
-
24-09-2019 - |
Domanda
Ho un database MySQL andato via con Django sotto WSGI.Ho trovato voci per questo problema su stackoverflow, ma niente con Django in particolare.Google non aiuta, fatta eccezione per le soluzioni alternative (come il polling il sito una volta ogni tanto, o aumentando il database di timeout).Nulla di definitivo.Tecnicamente, Django e/o MySQLdb (sto usando l'ultima 1.2.3c1) dovrebbe cercare una riconnessione se il server impiccato la connessione, ma questo non accade.Come posso risolvere questo problema senza soluzioni alternative ?
Soluzione
show variables like 'wait_timeout';
questa è l'impostazione getterà di nuovo il "mysql andato via" errore
impostarlo su un valore molto grande per evitare che "andato via"
o semplice ri-ping la connessione mysql dopo un certo periodo di
Altri suggerimenti
Gli sviluppatori Django ha dato una risposta breve per tutte le domande di questo genere a https: // codice. djangoproject.com/ticket/21597#comment:29
- Risoluzione impostata su WONTFIX
In realtà questo è il comportamento previsto dopo # 15119. Vedere quel biglietto per la logica.
Se si preme questo problema e non si vuole capire cosa sta succedendo, non riaprire questo biglietto, basta fare questo:
soluzione consigliata:. Chiudere il collegamento con
from django.db import connection; connection.close()
quando si sa che il programma sta per essere inattivo per un lungo periodo di tempoCRAPPY SOLUZIONE: aumento wait_timeout così è più lungo del tempo massimo di inattività del vostro programma.
In questo contesto, il tempo di inattività è il tempo che intercorre tra due successive query di database.
Si potrebbe creare un middleware per il ping() la connessione a MySQL (che si riconnette se scaduta) prima di elaborare la vista
Si potrebbe anche aggiungere un middleware per intercettare l'eccezione, ricollegare, e ripetere l' vista (penso che preferirei la soluzione di cui sopra come più semplice, ma tecnicamente dovrebbe funzionare ed essere performante assumendo i timeout sono rari.Questo presuppone anche un fallito di vista non ha effetti collaterali, che è una proprietà desiderabile, ma può essere difficile da fare, soprattutto se si scrive su un filesystem come un db vostro punto di vista.)