【问题标题】:Diagnosing 2013 Lost connection to MySQL诊断 2013 年丢失与 MySQL 的连接
【发布时间】:2016-11-17 18:43:24
【问题描述】:

我将 SQLAlchemy 与两个 MySQL 数据库一起使用。其中一个是我在本地机器上托管的开发数据库,​​另一个是 ClearDB 在 Heroku 上提供的 MySQL 服务器,用于生产。

当它与另一个服务执行同步操作时,我与数据库打开了一个长时间运行的会话。在我的本地机器上,这完成得很好,但在生产中我得到了错误(2013,'Lost connection to MySQL server during query')。

我读过其他帖子说它可能是请求的大小太大或需要调整池刷新变量。我不相信事务有效负载相对较大,并且在调用 SQLAlachemy create_engine 时设置 pool_recycle 变量似乎不起作用。

有没有其他人遇到过这个问题或能够帮助我缩小导致该错误的根本原因 - 这似乎是一个包罗万象的问题,我不知道从哪里开始。

根据 cmets 的要求,两个系统都为 select @@interactive_timeout, @@wait_timeout 返回相同的值:28800、28800。

谢谢

【问题讨论】:

  • 请在您的开发数据库和生产数据库上发出此 SQL 查询。 select @@interactive_timeout, @@wait_timeout 。请edit您的问题告诉我们您在两个数据库中的值。有时生产数据库的超时时间比开发数据库短。
  • 啊,当我开始发布此内容时,我的意思是要包括这些数字……但忘记了。我已经更新了我的问题。谢谢@O.Jones
  • 您是否在交互式客户端会话中选择了变量?如果是这样,你需要做SELECT @@global.interactive_timeout, @@global.wait_timeout。在交互式会话中,会话级别的wait_timeout 被调整为interactive timeout,所以它没有用。
  • 嗨@elenst,不太清楚你的意思。我正在使用 Sequel Pro 进行这些查询(如果有帮助的话)。我用 global 再次尝试了它们,并得到了与上面发布的相同的结果:/。
  • 如果您在会话开始时在服务器上执行 ping 操作,并且在连接超时后,您会获得相同的 IP 地址吗?可能是“路由”问题。

标签: mysql heroku sqlalchemy cleardb


【解决方案1】:

即使这两个数据库通常使用相同的超时和配置。结果是 ClearDB 在其他地方执行了超时。

ClearDB 监控连接并在它们打开超过一分钟时终止它们。我最初找不到这个docuemnted

修复实际上是在创建引擎时将pool_recycle 参数设置为pool_recycle=60。我之前的尝试是使用比这更高的任意数字(因为我不知道 ClearDB 的超时)。

【讨论】:

  • 只为到达并希望直接看到它的任何人:create_engine('mysql://user:pass@host/database', pool_recycle=60, convert_unicode=True)
  • @tandy 我们把代码放在哪里?
  • @cheese -- 我相信你在哪里创建你的数据库连接引擎。虽然我不确定你的项目是什么样子
猜你喜欢
  • 2021-12-26
  • 2019-09-21
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 2019-06-29
相关资源
最近更新 更多