【问题标题】:Cannot connect to mysql with 127.0.0.1无法使用 127.0.0.1 连接到 mysql
【发布时间】:2012-04-27 09:16:47
【问题描述】:

通过以下代码,我可以连接到 mysql: mysql_connect("localhost","username","");

但如果我将 localhost 更改为 127.0.0.1 我会收到以下错误:

无法连接到“127.0.0.1”上的 MySQL 服务器 (13)

为什么它不适用于 127.0.0.1?

【问题讨论】:

  • 这应该是“权限被拒绝”的问题。
  • 你用的是什么平台,windows还是unix?
  • @Jürgen Thelen — 为什么要这样做?
  • @Quentin:错误 13 通常表示“权限被拒绝”。至少这是 perror 13 在我的系统上输出的内容。

标签: php mysql database


【解决方案1】:

localhost 是特殊情况,它使用 UNIX 套接字而不是 TCP/IP。 127.0.0.1 没有得到特殊处理。

the documentation:

在 Unix 上,MySQL 程序对主机名 localhost 进行特殊处理,与其他基于网络的程序相比,这种方式可能与您所期望的不同。对于到 localhost 的连接,MySQL 程序尝试使用 Unix 套接字文件连接到本地服务器。即使给出 --port 或 -P 选项来指定端口号,也会发生这种情况。要确保客户端与本地服务器建立 TCP/IP 连接,请使用 --host 或 -h 指定主机名值 127.0.0.1,或本地服务器的 IP 地址或名称。您还可以使用 --protocol=TCP 选项显式指定连接协议,即使对于 localhost 也是如此。

如果在您使用 TCP/IP 时它不起作用,那么数据库可能没有在网络上侦听。这通常是一件好事,因为它增强了安全性(不是监听 127.0.0.1 会暴露任何问题,而是监听所有接口会提供更多攻击机会)。

如果您确实想允许通过网络进行连接,请参阅skip-networking

【讨论】:

    【解决方案2】:

    您的主机文件中是否有一个条目将 127.0.0.7 映射到 localhost?

    【讨论】:

      【解决方案3】:

      您的系统上是否安装/运行了超过 1 个 mysql 服务器?如果是这样,请指定您尝试访问的 mysql 服务器的端口号,例如 127.0.0.1:3306,127.0.0.1:8889 等。

      如果您不知道您的系统上是否还有其他 mysql 服务器实例也在运行,请指定端口。

      【讨论】:

      • 现在运行第二个 MySQL 实例会阻止第一个实例在默认端口上运行吗?
      • 不,它不会阻止运行,但它可能无法访问mysql服务器而不提及端口号,即使它在运行超过1个实例时在默认端口上运行
      【解决方案4】:

      当您在"information_schema" 数据库的"USER_PRIVILEGES" 表中添加'root'@'127.0.0.1' 的权限时,您将能够访问它

      【讨论】:

      • 没有。如果这是问题,错误将是“用户访问被拒绝”,而不是“无法连接”
      【解决方案5】:

      您也可以尝试禁用 SELINUX

      【讨论】:

        猜你喜欢
        • 2020-09-29
        • 1970-01-01
        • 2012-02-08
        • 1970-01-01
        • 1970-01-01
        • 2015-07-23
        • 2014-08-28
        • 1970-01-01
        • 2020-02-22
        相关资源
        最近更新 更多