11

我的本地系统需要大约 1 秒来建立 MySQLi 连接。代码:

$db = new mysqli( 'localhost', 'root', 'pass', 'mydb' );

为什么这么慢?这是正常的吗?我可以改进它吗?

4

3 回答 3

40

将“localhost”切换到 127.0.0.1。

所以,而不是:

$db = new mysqli( 'localhost', 'root', 'pass', 'mydb');

利用:

$db = new mysqli( '127.0.0.1', 'root', 'pass', 'mydb');

看到这个问题似乎很受欢迎,很多人想知道为什么会这样:

这是因为 MySQL 客户端将对主机名进行 IPV6 查找。如果失败(在这种情况下,显然失败了),它将尝试进行 IPV4 查找。在 IPV6 (AAAA) 查找失败和 IPV4 (A) 查找成功之间,我们得到的是一个持续约 1-2 秒的连接超时周期。

值得注意的是,这个问题似乎只发生在 Windows 7 及更高版本中。在 Windows 7 之前,localhost 解析由 hosts 文件处理,该文件预先配置为127.0.0.1

于 2012-11-18T11:55:18.123 回答
3

正如托尼建议的那样

我编辑了 Mysql my.ini 以将 mysql 服务更改为仅绑定到 IPV4 环回适配器。

[mysqld]
...
bind=127.0.0.1
于 2012-11-18T11:55:41.527 回答
1

另一种选择是编辑 hosts 文件,该文件位于 windows\system32\drivers\etc 下

# localhost name resolution is handled within DNS itself.
    127.0.0.1       localhost
#   ::1             localhost

使用具有管理员权限的编辑器取消注释 127.0.0.1。

于 2015-04-03T18:53:58.833 回答