Pylons 错误 - “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
解决方案
我想我修好了。事实证明我有一个简单的配置错误。我的 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 认为已过期的连接?