我有以下错误消息:
SQLSTATE [HY000] [2003]无法连接到MySQL服务器 '192.168.50.45'(4)
我如何解析这个(我有HY000,我有2003年,我有(4)。
答案 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'对于连接,通常会在不屏蔽问题的情况下对其进行排序,例如增加超时或增加带宽。