【问题标题】:localhost vs. 127.0.0.1 in mysql_connect()mysql_connect() 中的 localhost 与 127.0.0.1
【发布时间】:2011-04-12 13:40:25
【问题描述】:
  1. mysql_connect() 中使用localhost 是否比使用127.0.0.1 更快?
  2. PHP 脚本和mySQL 之间的连接类型是什么(使用mysql_connect() 函数时)?是 TCP/IP 吗?

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    1. 在 Windows 和 Linux 之间有所不同。如果您使用 unix 域套接字,它会比使用 TCP/IP 稍微快一些(因为您的开销更少)。
    2. Windows 使用 TCP/IP 作为默认设置,而如果您选择 localhost,Linux 会尝试使用 Unix 域套接字,如果您选择 127.0.0.1,则会尝试使用 TCP/IP。

    【讨论】:

    • 谢谢!为什么 Apache 不通过 TCP/IP 或基于套接字的连接与 PHP 进行交互?
    • + linux 中令人讨厌的事情是,当您将 'localhost' 指定为主机和特定端口时,它只是忽略整个端口位并使用默认套接字,而不是在运行多个服务器时想要的东西在一台机器上(因此不同的端口..)。
    • @Wrikken,没错,但使用 127.0.0.1:port 很容易避免
    • @halfdan:确实,但是在开始拆除一些桌子之前需要知道一些事情:P 啊,生活和学习,那是前一段时间了,我永远不会算了。
    • @djangofan:不是吗? 127.1 不是有效的 IP 地址。它可以作为数据库驱动程序的后备工作。
    【解决方案2】:

    "localhost" 表示本地套接字连接,而 127.0.0.1 是 TCP/IP。是的,套接字比 TCP/IP 更快。

    引用http://pl.php.net/mysql_connect

    当你指定“localhost”或“localhost:port”作为服务器时,MySQL 客户端库将覆盖它并尝试连接到本地套接字(Windows 上的命名管道)。如果要使用 TCP/IP,请使用“127.0.0.1”而不是“localhost”。如果 MySQL 客户端库尝试连接到错误的本地套接字,您应该在 PHP 配置中设置正确的路径,并将服务器字段留空。

    【讨论】:

    • TCP/IP 也是基于套接字的。我知道你的意思,但你会用它混淆别人。
    • 可能是Unix-socket connection
    • 你是对的。我将其更改为“本地套接字”以进行澄清。感谢您的关注。
    【解决方案3】:

    不,建议使用 127.0.0.1,因为 Windows 7 在 IPv6 和 IPv4 之间进行选择存在问题。我试过这个,如果我使用 localhost,页面重新加载大约 1 秒(1.04 秒),当我使用 127.0.0.1 时,页面重新加载 50 毫秒。两者都在 Windows 7 下使用。
    在 Windows XP 中没有任何区别。

    【讨论】:

    • 有同样的经历。从 localhost 到 127.0.0.1 将我的延迟从 1 秒降低到 5 毫秒。谢谢!
    • 那是因为windows在以后的版本中把hosts文件中的localhost去掉了,所以需要很长时间才能解决。
    【解决方案4】:

    对于 Unix,添加到客户端块之后 [client] 在 /etc/mysql/my.cnf 这一行:

    protocol=tcp
    

    【讨论】:

      【解决方案5】:

      PHP 网站说:

      注意:

      每当您指定“本地主机”或 “localhost:port”作为服务器,MySQL 客户端库将覆盖它并 尝试连接到本地套接字 (在 Windows 上命名管道)。如果你想 要使用 TCP/IP,请改用“127.0.0.1” “本地主机”。如果 MySQL 客户端 库试图连接到错误 本地套接字,您应该设置 正确的路径,如你的 PHP 配置并离开服务器 字段空白。

      我猜速度差异太小了,你不应该担心。

      【讨论】:

        【解决方案6】:

        对于 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 文件,则需要复制提供的名为 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/

        【讨论】:

          【解决方案7】:

          localhost 不是更快,而是慢了一点。

          话虽如此,如果您要连接到其他人;赶上我的漂移?

          谁能说连接的哪一边更失败?没有人。那:

          127.0.0.1 比 localhost 更快。在任何终端上尝试。

          【讨论】:

          • 正确的@Php 网站!对于大多数用户来说,差异是微不足道的......让我们不要把它留在那里!
          猜你喜欢
          • 2012-07-24
          • 2016-05-29
          • 2011-06-07
          • 2018-06-28
          • 1970-01-01
          • 1970-01-01
          • 2011-07-11
          • 1970-01-01
          相关资源
          最近更新 更多