Erro de Pylons - 'O servidor MySQL desapareceu'
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
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?