(2006, 'MySQL Server foi embora') em WSGI Django
-
24-09-2019 - |
Pergunta
Eu tenho um mysql embora com Django sob o WSGI. Encontrei entradas para esse problema no Stackoverflow, mas nada com o Django especificamente. O Google não ajuda, exceto as soluções alternativas (como pesquisar o site de vez em quando ou aumentar o tempo limite do banco de dados). Nada definitivo. Tecnicamente, o Django e/ou MySQLDB (estou usando o 1.2.3C1 mais recente) devem tentar uma reconexão se o servidor enforcou a conexão, mas isso não acontece. Como posso resolver esse problema sem soluções alternativas?
Solução
show variables like 'wait_timeout';
Esta é a configuração de volta o erro "mysql desaparecido"
Defina -o como um valor muito grande para evitá -lo "desaparecer"
ou simples reencaminhar a conexão MySQL após um determinado período
Outras dicas
Os desenvolvedores de Django deram uma resposta curta para todas as perguntas como esta em https://code.djangoproject.com/ticket/21597#comment:29
- Resolução definida como wontfix
Na verdade, este é o comportamento pretendido após o #15119. Veja esse bilhete para a lógica.
Se você atingir esse problema e não quiser entender o que está acontecendo, não reabra este ingresso, faça isso:
Solução recomendada: feche a conexão com
from django.db import connection; connection.close()
Quando você sabe que seu programa ficará ocioso por um longo tempo.Solução ruim: aumente o wait_timeout para que seja mais longo que o tempo de marcha lenta máxima do seu programa.
Nesse contexto, o tempo ocioso é o tempo entre duas consultas sucessivas de banco de dados.
Você pode criar middleware para ping () a conexão MySQL (que se reconectará se ele tocará) antes de processar a visualização
Você também pode adicionar middleware para capturar a exceção, reconectar e tentar novamente a vista (acho que prefiro a solução acima como mais simples, mas ela deve funcionar tecnicamente e ser performante assumindo que os tempos limite são raros. Isso também assume que uma visão falhada não tem lado Efeitos, que é uma propriedade desejável, mas podem ser difíceis de fazer, especialmente se você escrever em um sistema de arquivos e também a um banco de dados.)