Python MySQL-Connector在Windows VPS上间歇性连接失败

3

我正在使用 Windows VPS 进行数据抓取。我使用 Python MySQL-Connector 将这些抓取的数据上传到 Linux 专用服务器。

import mysql.connector

    mydb = mysql.connector.connect(
      host="...",
      user="...",
      password="...",
      database="...",
      connection_timeout=60
    )
    mycursor = mydb.cursor()

大约25%的时间会出现失败,或者需要超过20秒的时间。当它失败时,我会得到一个10060错误。问题更可能是我的Linux服务器还是我的Windows VPS?真诚地感谢您的帮助。以下是错误消息:

2055: Lost connection to MySQL server at '[IP]:3306', system error: 10060 A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

如果您正在使用“localhost”连接到本地计算机,则可能不会执行max_allowed_packet,因为您甚至没有使用TCP进行连接。本地主机使用UNIX域套接字。我想知道,如果您通过“127.0.0.1”连接并强制使用TCP连接,您的应用程序是否可以在本地工作? - Bill Karwin
当我说“本地机器”时,我指的是我的笔记本电脑。因此,当我通过脚本上传(使用远程MySQL)时,会有2%的失败率。当我在我的笔记本电脑上使用相同的脚本执行相同的查询时,似乎总是正常工作。 - Ned Hulton
1
这个家伙似乎面临着完全相同的问题。https://johnnn.tech/q/intermittent-mysql-lost-connection-system-error-10060/. 他怀疑“也许问题与我使用共享主机而没有支付私人服务器有关。” - Bilal Qandeel
你发送到服务器的数据量是多少(以MB为单位)? - Salman A
vi my.cnf
bind-address=0.0.0.0
skip-name-resolve=1重启MySQL。
- dogs Cute
显示剩余5条评论
2个回答

0

这个错误很可能与mysql数据库服务器慢有关,所以您可以执行以下操作:

  1. connection_timeout增加到较高的值,例如600。
  2. 配置负责数据库服务器性能的设置(例如,请参见此演示文稿 - https://www.oracle.com/technetwork/community/developer-day/mysql-performance-tuning-403029.pdf),尤其是设置mysql RAM使用量服务器(总系统RAM的1/2 - 变量innodb_buffer_pool_size(在my.cnf中设置))
  3. 确保在使用完光标后关闭光标,调用mycursor.close
  4. 如有可能,请增加系统与数据库服务器的资源(CPU、RAM、更快的磁盘驱动器)。

0

从错误信息来看,我怀疑这是由于某个端口被阻塞引起的(MySQL服务器的默认TCP/IP端口为3306)。

请检查3306端口是否繁忙:

netstat -tulpn | grep 3306

然后在再次运行您的应用程序之前尝试释放该端口。


如果它只有25%的失败率,那么端口是开放的。 - Anu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接