【问题标题】:pymysql.err.OperationalError - Lost connection to MySQL server during querypymysql.err.OperationalError - 查询期间丢失与 MySQL 服务器的连接
【发布时间】:2020-12-05 03:46:36
【问题描述】:

我正在使用 Python 脚本将记录插入 MySQL 数据库表。 脚本失败并显示以下错误消息。

MySQL 版本为 8.0.17Python 版本为 3.6.5

(pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query ([WinError 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接主机没有响应)')

(此错误的背景:http://sqlalche.me/e/e3q8

问题只针对少数几张桌子。

【问题讨论】:

  • 这是配置、服务器或网络问题。没有细节不能说更多。
  • 通常当您收到该消息时,您会在其中一个 timeout 中运行,因此您应该从增加它们开始。
  • MySQL 的超时变量设置有帮助吗?

标签: python mysql sqlalchemy connection operationalerror


【解决方案1】:

MySQL 自动关闭在特定时间段内空闲的连接(wait_timeout 用于非交互式连接)。因此,如果空闲时间过多并且连接未更新或连接因服务器重新启动而失效,则可能会发生连接关闭。

SQL-Alchemy 在其how to deal with pool disconnects 的文档中提到了一些关于如何解决自动断开连接和数据库重新启动问题的策略。

你应该看看的两个选项是pool_pre_ping 参数,它在每个查询之前添加一个SELECT 1 以检查连接是否仍然有效,否则连接将被回收。

另一个选项是pool_recycle 时间应该总是小于你的mysql wait_timeout。在此时间之后,连接会自动回收,不会在wait_timeout 中运行。

您可以使用命令检查您在 MySQL 中的连接

SHOW PROCESSLIST;

您应该在哪里看到所有打开的连接以及它们所处的状态。

【讨论】:

  • 你能详细解释一下链接吗?
猜你喜欢
  • 2012-11-15
  • 2015-09-22
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多