我正在使用带有两个MySQL数据库的SQLAlchemy。其中一个是我的机器上本地托管的开发数据库,另一个是ClearDB在Heroku上提供的用于生产的MySQL服务器。
我与数据库打开一个长时间运行的会话,同时它与另一个服务执行同步操作。在我的本地机器上,这很好,但是在生产中我得到了错误(2013年,'在查询期间丢失了与MySQL服务器的连接')。
我读过其他帖子,说它可能是请求的大小太大,或者是需要调整的池刷新变量。我不相信事务有效负载相对那么大,并且在调用SQLAlachemy pool_recycle
时设置create_engine
变量似乎不起作用。
是否有其他人遇到过这个问题,或者能够帮助我缩小这个错误的根本原因 - 这似乎是一个问题,我不知道从哪里开始。
根据评论中的要求,两个系统都会为select @@interactive_timeout, @@wait_timeout
返回相同的值:28800,28800。
由于
答案 0 :(得分:3)
即使这两个数据库看起来通常使用相同的超时和配置。事实证明,ClearDB在其他地方执行了超时。
ClearDB监视连接并在打开超过一分钟时终止它们。我原本不能找到这个docuemnted。
该修复实际上是在创建引擎时将pool_recycle
参数设置为pool_recycle=60
。我以前的尝试是使用任意数字(因为我不知道ClearDB的超时)高于此值。