【问题标题】:how to understand "can't connect" mysql error messages?如何理解“无法连接”mysql错误信息?
【发布时间】:2012-06-29 04:16:05
【问题描述】:

我收到以下错误消息:

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

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

【问题讨论】:

  • “我有 HY000,我有 2003,我有 (4)”是什么意思
  • 可能在这里回答:stackoverflow.com/questions/2138959/…
  • 另一种可能的解决方案:wolfcms.org/forum/topic1123.html
  • @JohnP - 那里是代码 111,我有代码 4
  • 操作系统错误代码 4:系统调用中断 - 至少据我所知...您确定您的 mysql 安装已启动并处于活动状态,并且正在接受连接吗?

标签: mysql sql mysql-error-2003


【解决方案1】:

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

【讨论】:

  • 好的,那我怎么知道 4 是什么意思呢?我在 Ubuntu 上
  • 你不会,除非你确切地知道哪个系统调用失败了。
【解决方案2】:

使用 MySQL 自带的 perror 工具:

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

可能是a bug报错,在这种情况下,可能是简单的连接超时(errno 111)

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

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

        别忘了重启MySQL才能生效。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2015-02-03
            • 2015-07-28
            • 2021-12-27
            • 2018-01-03
            • 1970-01-01
            • 1970-01-01
            • 2014-05-18
            • 2016-08-11
            • 1970-01-01
            相关资源
            最近更新 更多