【问题标题】:Pylons error - 'MySQL server has gone away'Pylons 错误 - 'MySQL 服务器已消失'
【发布时间】:2008-08-11 19:59:32
【问题描述】:

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

【问题讨论】:

  • 在我编写的脚本擅离职守并同时将 10000 行插入表中后,我收到此错误。对我来说似乎是一个故障保险 - 不确定这是否与您的问题有关......

标签: python mysql pylons


【解决方案1】:

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

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

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

解决办法就是简单地将ini中的第二行改为:

sqlalchemy.default.pool_recycle = 1800

【讨论】:

  • 最近才看到这篇文章有一些流量。应该注意的是,这个问题与 Pylons 0.9.6 有关。这应该在 Pylons 0.9.7 中得到解决,并且 'sqlalchemy.default' 属性消失了,取而代之的是简单的 'sqlalchemy'
【解决方案2】:

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

show variables like '%timeout%';

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

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

【讨论】:

  • 我不能肯定;我还不太了解 Pylons 的内部结构。我也没有机会浏览文档(忙忙碌碌)。我不认为 SELECT 1;事情是一种选择,但似乎也有点笨拙:)。
猜你喜欢
  • 2011-04-25
  • 2012-06-28
  • 2011-12-18
  • 2011-10-12
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多