如何理解“无法连接”mysql错误信息?

时间:2012-06-27 16:44:00

标签: mysql sql mysql-error-2003

我有以下错误消息:

  

SQLSTATE [HY000] [2003]无法连接到MySQL服务器   '192.168.50.45'(4)

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

6 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:4)

使用MySQL附带的perror工具:

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

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

答案 2 :(得分:3)

FWIW,花了大约2-3个月的时间以各种方式研究这个问题,我们得出的结论是(至少对我们来说),当网络中的数据太多时,会发生(4)错误连接在合理的时间内完成。从我们的调查来看,(4)发生在握手过程的中途。 你可以在unix环境中通过使用'netem'来伪造网络拥塞来看到这一点。

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

答案 3 :(得分:1)

我碰巧遇到了这个问题。最后增加connect_timeout。

答案 4 :(得分:0)

我正在努力解决同样的问题。

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

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

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

答案 5 :(得分:0)

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