我正在使用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 :(得分: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;
是一个选项,这将使它们保持活力,代价是基本上没有服务器负载和最小的网络流量。最后一个想法是:你是否设法使用挂架认为已经过期的连接?