16

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

2 回答 2

8

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

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

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

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

sqlalchemy.default.pool_recycle = 1800
于 2008-09-05T18:07:50.310 回答
2

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

show variables like '%timeout%';

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

AFAICT,pool_recycle实际上并没有使连接保持活动状态,它会在 MySQL 杀死它们之前自行使它们过期。我对 pylon 不熟悉,但是如果可以SELECT 1;选择让连接间歇性地执行 a 操作,那将使它们保持活动状态,但代价是基本上没有服务器负载和最小的网络流量。最后一个想法:您是否以某种方式设法使用 pylons 认为它​​已过期的连接?

于 2008-08-18T21:35:39.387 回答