Pergunta

Estou usando Pylons (uma estrutura python) para servir um aplicativo web simples, mas parece morrer de vez em quando, com isso no log de erros: (2006, 'MySQL server has gone away')

Fiz algumas verificações e vi que isso acontecia porque as conexões com o MySQL não estavam sendo renovadas.Isso não deve ser um problema, porque o sqlalchemy.pool_recycle no arquivo de configuração deve mantê-lo ativo automaticamente.O padrão era 3600, mas liguei de volta para 1800 por causa deste problema.Ajudou um pouco, mas 3600 deve fique bem de acordo com os documentos.Os erros ainda acontecem semirregularmente.Eu não quero baixá-lo muito e usar o DOS em meu próprio banco de dados :).

Talvez algo na minha configuração do MySQL seja bobo?Não tenho certeza de onde procurar exatamente.

Outros detalhes relevantes:

  Python 2.5
  Pylons: 0.9.6.2 (w/ sql_alchemy)
  MySQL: 5.0.51
Foi útil?

Solução

Acho que consertei.Acontece que tive um erro de configuração simples.Meu arquivo ini dizia:

sqlalchemy.default.url = [connection string here]
sqlalchemy.pool_recycle = 1800

O problema é que meu environment.py arquivo declarou que o mecanismo mapearia apenas chaves com o prefixo: sqlalchemy.default então pool_recycle foi ignorado.

A solução é simplesmente alterar a segunda linha do ini para:

sqlalchemy.default.pool_recycle = 1800

Outras dicas

Você pode querer verificar as variáveis ​​de tempo limite do MySQL:

show variables like '%timeout%';

Você provavelmente está interessado em wait_timeout (menos provável, mas possível: interactive_timeout).No Debian e Ubuntu, os padrões são 28800 (o MySQL mata conexões após 8 horas), mas talvez o padrão para sua plataforma seja diferente ou quem administra o servidor tenha configurado as coisas de forma diferente.

AFAITO, pool_recycle na verdade não mantém as conexões ativas, ele as expira por conta própria antes que o MySQL as elimine.Não estou familiarizado com postes, mas se fizer com que as conexões sejam intermitentemente, faça um SELECT 1; é uma opção que os manterá vivos ao custo de basicamente nenhuma carga no servidor e tráfego de rede mínimo.Um pensamento final:você está de alguma forma conseguindo usar uma conexão que os pilões acham que expirou?

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