2008-08-11 125 views
13

[我希望这不是太隐晦…我会问新闻组,如果没有人知道这里]主塔错误 - 'MySQL服务器已经消失'

我正在使用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 
+0

我得到这个错误的脚本我写擅离职守,同时插入10000行到表后。看起来像对我来说是失败的保险 - 不知道这是否与你的问题有关... – 2008-08-11 20:24:33

回答

6

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

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

的问题是,我environment.py文件中声明,该引擎只会映射键的前缀:sqlalchemy.default所以pool_recycle被忽略。

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

sqlalchemy.default.pool_recycle = 1800 
+0

最近在这篇文章中看到了一些流量。应该指出的是,这个问题涉及到塔0.9.6。这应该在Pylons 0.9.7中处理,并且'sqlalchemy.default'属性消失,而只是简单的'sqlalchemy' – swilliams 2010-02-22 19:32:43

2

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

show variables like '%timeout%'; 

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

AFAICT,pool_recycle实际上并没有保持连接的存在,它会在MySQL杀死它们之前自行失效。我对塔架不熟悉,但是如果导致连接间歇性地执行,则可以选择这种方式,这样可以保持活动状态,其代价是基本上不需要服务器负载和最小的网络流量。最后一个想法是:你是否设法使用连接,认为连接已经过期?

+0

我不能肯定地说;我还不太了解主塔的内部。我还没有机会通过文档查询(繁忙)。我不认为SELECT 1;东西虽然是一个选项,似乎也有点kludgey :)。 – swilliams 2008-08-19 23:06:32