5

我有以下错误消息:

SQLSTATE[HY000] [2003] 无法连接到“192.168.50.45”上的 MySQL 服务器 (4)

我将如何解析这个(我有 HY000,我有 2003,我有(4)。

4

6 回答 6

10

HY000 是一个非常普遍的 ODBC 级别的错误代码,而2003是 MySQL 特定的错误代码,表示初始服务器连接失败。4 是 MySQL 驱动程序尝试进​​行的失败的操作系统级调用的错误代码。(例如,在 Linux 上,当连接被拒绝时,您将看到“(111)”,因为connect()调用失败并出现 ECONNREFUSED 错误代码,其值为 111。)

于 2012-06-27T16:47:18.833 回答
4

使用 MySQL 自带的 perror 工具:

shell> perror 4
OS error code   4:  Interrupted system call

它可能是一个错误报告错误的错误,在这种情况下,它可能是一个简单的连接超时(errno 111)

于 2012-06-27T21:23:58.273 回答
3

FWIW 花了大约 2-3 个月的时间以各种方式对此进行了研究,我们得出的结论是(至少对我们而言),当网络数据太多而无法连接到在合理的时间内完成。根据我们的调查,(4)发生在握手过程的中途。通过使用“netem”来伪造网络拥塞,您可以在 unix 环境中看到这一点。

快速的解决方案是增加连接超时参数。这将隐藏任何 (4) 错误,但可能不是问题的解决方案。真正的解决方案是查看当时 DB 端发生了什么。如果发生这种情况时您正在处理大量数据,那么看看您是否可以将其拆分为更小的块,或者甚至将处理传递到不同的服务器,如果您有这种奢侈,这可能是一个好主意。

于 2013-06-27T16:29:11.503 回答
1

我碰巧遇到了这个问题。增加connect_timeout终于搞定了。

于 2013-08-16T16:07:23.993 回答
0

我只是在同一个问题上苦苦挣扎。

禁用 DNS 主机名查找为我解决了这个问题。

[mysqld] ... ...跳过名称解析

不要忘记重启 MySQL 才能生效。

于 2013-10-17T04:07:51.733 回答
0

@cdhowie虽然在其他情况下您可能是对的,但对于该特定错误,(4)是由握手失败引起的mysql客户端库错误。它实际上在源代码中可见。正常原因是数据过多导致内部超时。为连接腾出“空间”通常会在不掩盖问题的情况下对其进行排序,例如增加超时或增加带宽。

于 2014-07-19T16:34:42.290 回答