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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top