Pylons错误 - 'MySQL服务器已断开连接
我正在使用Pylons(一个Python框架)来提供一个简单的网页应用,但它似乎时不时就会崩溃,错误日志里显示:(2006, 'MySQL服务器已经断开连接')
我查了一下,发现这是因为与MySQL的连接没有被更新。其实这不应该是个问题,因为配置文件里的sqlalchemy.pool_recycle
应该会自动保持连接活跃。默认值是3600
,但我把它调低到1800
,因为这个问题。这样做稍微有点帮助,但根据文档,3600
应该是没问题的。错误还是会时不时出现。我也不想把这个值调得太低,以免自己把数据库搞瘫痪 :)。
也许是我的MySQL配置有问题?我不太确定该从哪里入手。
其他相关细节:
Python 2.5
Pylons: 0.9.6.2 (w/ sql_alchemy)
MySQL: 5.0.51
2 个回答
2
你可能需要查看一下MySQL的超时设置:
show variables like '%timeout%';
你可能对 wait_timeout
感兴趣(还有一个不太常见的 interactive_timeout
)。在Debian和Ubuntu系统上,默认的超时时间是28800秒,也就是MySQL会在8小时后自动断开连接。不过,可能你使用的系统默认设置不同,或者服务器的管理员做了不同的配置。
据我了解,pool_recycle
并不会让连接一直保持活跃,它会在MySQL断开之前自己先让连接过期。我对pylons不太熟悉,但如果可以让连接间歇性地执行 SELECT 1;
,那样可以保持连接活跃,而且几乎不会增加服务器负担和网络流量。最后一个想法是:你是否在使用一个pylons认为已经过期的连接?
8
我想我解决了这个问题。原来我只是配置文件写错了。我的 ini 文件内容是:
sqlalchemy.default.url = [connection string here]
sqlalchemy.pool_recycle = 1800
问题在于我的 environment.py
文件里声明引擎只会处理以 sqlalchemy.default
开头的键,所以 pool_recycle
被忽略了。
解决办法就是把 ini 文件的第二行改成:
sqlalchemy.default.pool_recycle = 1800