我的本地系统需要大约 1 秒来建立 MySQLi 连接。代码:
$db = new mysqli( 'localhost', 'root', 'pass', 'mydb' );
为什么这么慢?这是正常的吗?我可以改进它吗?
将“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
正如托尼建议的那样:
我编辑了 Mysql my.ini 以将 mysql 服务更改为仅绑定到 IPV4 环回适配器。
[mysqld] ... bind=127.0.0.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。