Pylons错误 - 'MySQL服务器已经消失'

时间:2008-08-11 19:59:33

标签: python mysql pylons

我正在使用Pylons(一个python框架)来提供一个简单的Web应用程序,但它似乎时不时会死在错误日志中:(2006, 'MySQL server has gone away')

我做了一些检查,发现这是因为与MySQL的连接没有被更新。这应该不是问题,因为配置文件中的sqlalchemy.pool_recycle应该自动保持活动状态。默认值为3600,但由于此问题,我将其拨回1800。它有点帮助,但根据文档,3600 应该没问题。错误仍然是半定期发生的。我不想降低太多,但DOS我自己的数据库:)。

我的MySQL配置中的某些内容可能是傻瓜吗?不确定在哪里看。

其他相关细节:

  Python 2.5
  Pylons: 0.9.6.2 (w/ sql_alchemy)
  MySQL: 5.0.51

2 个答案:

答案 0 :(得分:6)

我想我修好了。事实证明我有一个简单的配置错误。我的ini文件是:

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

问题是我的environment.py文件声明引擎只会映射前缀为sqlalchemy.default的键,因此忽略了pool_recycle

解决方案是简单地将ini中的第二行更改为:

sqlalchemy.default.pool_recycle = 1800

答案 1 :(得分:2)

您可能想要检查MySQL的超时变量:

show variables like '%timeout%';

您可能对wait_timeout感兴趣(不太可能但可能:interactive_timeout)。在Debian和Ubuntu上,默认值是28800(MySQL在8小时后终止连接),但是你的平台的默认值可能不同,或者管理服务器的人配置的东西不同。

AFAICT,pool_recycle实际上并没有使连接保持活动状态,它会在MySQL杀死它们之前自行终止它们。我不熟悉pylons,但是如果间歇性地导致连接,则SELECT 1;是一个选项,这将使它们保持活力,代价是基本上没有服务器负载和最小的网络流量。最后一个想法是:你是否设法使用挂架认为已经过期的连接?