mysql_connect() 中的 localhost 与 127.0.0.1

Posted

技术标签:

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

【问题讨论】:

【参考方案1】:
    在 Windows 和 Linux 之间有所不同。如果您使用 unix 域套接字,它会比使用 TCP/IP 稍快(因为您的开销更少)。 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 网站!对于大多数用户来说,差异是微不足道的......让我们不要把它留在那里!

以上是关于mysql_connect() 中的 localhost 与 127.0.0.1的主要内容,如果未能解决你的问题,请参考以下文章

mysql_connect() 中的 localhost 与 127.0.0.1

如何从 MAMP 服务器添加图像 php 文件

MySQL - undefined function mysql_connect()

php mysql_connect 资源总是一样的

mysql_connect() 总是拒绝访问

php中@mysql_connect与mysql_connect有什么区别