【问题标题】:MySQL working with 127.0.0.1 but not working with localhost?MySQL 使用 127.0.0.1 但不使用 localhost?
【发布时间】:2011-01-18 00:45:12
【问题描述】:

我在php MySQL中有一个奇怪的问题:

php 与127.0.0.1 连接,但与localhost 不连接。

如何解决这个问题?

【问题讨论】:

  • @air:我编辑了您的问题,如果您不同意,请随时回滚。

标签: php mysql windows-7


【解决方案1】:

localhost 必须在您的主机文件中定义,默认情况下在 Windows 和大多数操作系统上。

检查以下文本文件,看看发生了什么:

C:\WINDOWS\system32\drivers\etc\hosts

请注意,“hosts”是文件,没有扩展名,它不是文件夹。这个文件应该几乎是空的,如果你看到条目要么你的 AV/垃圾邮件拦截器添加了大量指向 127.0.0.1 的条目,要么讨厌的恶意软件在那里写了垃圾,尽管新条目低于旧条目。 localhost 应该是该文件中的第一个条目。

【讨论】:

  • 该主机文件可能有::1 用于本地主机。我通常会禁用任何非 IP4 相关的东西来让事情正常工作。
【解决方案2】:

试试:

IE-->工具-->选项-->连接-->局域网设置检查本地地址绕过代理

【讨论】:

    【解决方案3】:

    还可以查看定义用户访问权限的 mysql 数据库。您可以在那里定义允许给定用户连接的源主机。更多详情可咨询http://dev.mysql.com/doc/refman/5.1/en/connection-access.html

    【讨论】:

    • IIRC,我以前也遇到过这个问题。我专门通过“127.0.0.1”授予用户访问权限,但没有通过“localhost”授予用户访问权限。
    【解决方案4】:

    在命令行中尝试ping localhost,它可能会解析为::1: 相当于127.0.0.1的IP6

    要修复它,添加(或取消注释)该行:

       127.0.0.1       localhost
    

    在C:\WINDOWS\system32\drivers\etc\hosts

    【讨论】:

      【解决方案5】:

      我记得这是 Windows 上 Mysql 的一个长期且有文档记录的功能。关于本地套接字的工作方式之类的。

      【讨论】:

        【解决方案6】:

        localhost 是否解析为 IPv6 地址,而不是 IPv4,并且 MySQL 没有监听 v4 地址?

        解决办法是让 localhost 解析到 v4 地址,或者让 MySQL 监听 v6 地址。

        【讨论】:

          【解决方案7】:

          如果 MySQL 连接到 127.0.0.1,它会通过 TCP/IP 连接,而如果它连接到 localhost,它会通过套接字连接。
          PHP 是否在寻找 mysql.sock 的正确位置?确保 php.ini 和 my.conf 有匹配的位置

          【讨论】:

            【解决方案8】:

            对于 Mac,这是解决方案:

            使用 localhost 而不是 MAC 上的 127.0.0.1 连接到 MySQL。很长一段时间以来,我一直在使用 127.0.0.1 连接到我的开发平台上的 MySQL,因为由于某种原因 localhost 不起作用。原来是因为 127.0.0.1 使用 TCP/IP 而 localhost 使用套接字。 php.ini 文件指向了 mysql.sock 的错误位置,所以您只需更改它,重新启动 apache 即可!

            Open php.ini: /private/etc/php.ini
            Find the following line: mysql.default_socket = /var/mysql/mysql.sock
            Replace with: mysql.default_socket = /tmp/mysql.sock
            Restart apache: apachectl restart
            

            注意:根据您的设置,您可能还需要更新 php.ini 中的这些行:

            mysqli.default_socket = /tmp/mysql.sock
            pdo_mysql.default_socket = /tmp/mysql.sock
            

            注意:如果您没有 php.ini 文件,则需要复制提供的名为 php.ini.default 的默认文件

            sudo cp /private/etc/php.ini.default /private/etc/php.ini
            

            通过http://madproject.com/general/connect-to-mysql-using-localhost-instead-of-127-0-0-1-on-a-mac/

            【讨论】:

              【解决方案9】:

              如果你不在windows上也测试mysql是否通过socket连接,本地正常。

              使用 mysql 客户端强制 tcp

              mysql -usomeone -p --protocol=TCP
              

              对比套接字(linux默认)

              mysql -usomeone -p 
              mysql -usomeone -p --protocol=socket
              

              后者不适用于我的someone@127.0.0.1

              【讨论】:

                猜你喜欢
                • 2015-06-30
                • 2015-10-03
                • 2011-07-11
                • 1970-01-01
                • 2018-04-24
                • 1970-01-01
                • 2013-09-24
                • 1970-01-01
                • 2020-05-29
                相关资源
                最近更新 更多