我正在使用 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
有帮助吗?

解决方案

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

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

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

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

sqlalchemy.default.pool_recycle = 1800

其他提示

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

show variables like '%timeout%';

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top