我已经准备了很多关于这个问题的帖子。我的理解是,应用程序有一个设置,即在删除空闲数据库连接和创建新连接之前,要保持多长时间的空闲数据库连接。MySQL有一个设置,说明保持空闲连接的时间。在没有站点活动之后,MySQL会使应用程序的连接超时。但应用程序不知道这一点,仍然尝试使用现有连接,但失败了。失败后,应用程序将断开连接并重新建立一个,然后就没事了。在
在我的本地mysql服务器上,等待超时设置为10秒。在本地运行的应用程序上,我已将池回收设置为5秒。在10秒不活动之后,我发出了一个请求,但仍然收到这个错误。在10秒内再提出一个请求,就可以了。如果等待时间超过10秒,则再次出现此错误。在
有什么想法吗?在
mysql> SELECT @@global.wait_timeout\G
*************************** 1. row ***************************
@@global.wait_timeout: 10
1 row in set (0.00 sec)
一。在
^{pr2}$一。在
engine = engine_from_config(settings, 'sqlalchemy.twelvemt.')
DBSession.configure(bind=engine)
一。在
OperationalError: (OperationalError) (2006, 'MySQL server has gone away') 'SELECT beaker_cache.data \nFROM beaker_cache \nWHERE beaker_cache.namespace = %s' ('7cd57e290c294c499e232f98354a1f70',)
尝试为您的连接设置
sqlalchemy.pool_recycle
当我使用mySQL时,我总是把它添加到我的配置文件中
如果没有这一点,在活动中长时间暂停后,我会在第一个请求上得到
MySQL server has gone away
。在看起来您得到的错误是由烧杯连接引发的,而不是DBSession连接,需要为每个连接设置pool_recycle选项。在
假设您在x.ini文件中配置烧杯,您可以通过
session.sa.*
传递sqlalchemy选项,所以session.sa.pool_recycle = 5
见http://docs.pylonsproject.org/projects/pylons-webframework/en/v0.9.7/sessions.html#sa
我通过在每个请求后对会话调用remove()来解决这个问题。您可以通过定义全局函数来完成此操作:
然后,将此函数设置为每个涉及请求和数据库会话的类都运行:
^{pr2}$这是因为SQLAlchemy希望用户处理数据库会话的打开和关闭。更多信息可在documentation中找到。在
相关问题 更多 >
编程相关推荐