问题描述
我正在使用Python脚本将记录插入MysqL数据库表中。 该脚本失败,并显示以下错误消息。
MysqL版本是8.0.17 , Python版本3.6.5
(pyMysqL.err.OperationalError)(2013,'在查询过程中丢失了与MysqL服务器的连接([WinError 10060]连接尝试失败,因为一段时间后被连接方未正确响应,或者由于建立连接而建立的连接失败主机未能响应)')
(此错误的背景位于:http://sqlalche.me/e/e3q8)
此问题仅适用于几张桌子。
解决方法
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;
您应该在其中看到所有打开的连接以及它们所处的状态。