【发布时间】:2015-03-14 09:24:15
【问题描述】:
我使用 Flask 构建了一个小型 Python REST 服务,并使用 Flask-SQLAlchemy 与 MySQL DB 进行通信。
如果我直接连接到 MySQL 服务器,一切都很好,完全没有问题。如果我使用 HAproxy(处理 HA/故障转移,尽管在这个开发环境中只有一个 DB 服务器),那么如果应用程序与 DB 的通信不够频繁,我会经常收到 MySQL server has gone away 错误。
我的 HAproxy 客户端超时设置为 50 秒,所以我认为正在发生的事情是它会切断流,但应用程序不知道并尝试使用无效连接。
在使用 HAproxy 等服务时,我应该使用什么设置?
它似乎也不会自动重新连接,但如果我手动发出请求,我会得到Can't reconnect until invalid transaction is rolled back,这很奇怪,因为它只是我正在拨打的select(),所以我不这么认为是 commit() 我错过了 - 或者我应该在每个基于 ORM 的查询之后调用 commit() 吗?
【问题讨论】:
-
我遇到了同样的问题,即“MySQL 服务器已消失”,它通常与查询返回的结果集的大小有关。尝试执行相同的查询,但强制执行限制并选择更少的列。
-
@AndyC 这个问题有运气吗?我也一样,设置池回收并不能解决它!
-
@SJoshi 在 app.config 中设置
SQLALCHEMY_POOL_RECYCLE = 30(我的 HAproxy 超时为 50)对我有用。
标签: python mysql flask flask-sqlalchemy haproxy