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 ?

È stato utile?

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 tempo

  •   
  • CRAPPY 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.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top