【问题标题】:Why is my MySQLi connection so slow?为什么我的 MySQLi 连接这么慢?
【发布时间】:2012-11-18 11:48:02
【问题描述】:

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

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

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

【问题讨论】:

  • 您能告诉我们更多关于您的系统的信息吗?例如,您使用的是什么操作系统..
  • 你用vm-ware做本地服务器吗?
  • 如果您使用的是 windows,请尝试127.0.0.1 而不是 localhost。

标签: php mysql


【解决方案1】:

将“localhost”切换为 127.0.0.1。

所以,而不是:

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

用途:

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

看到这个问题似乎很受欢迎,很多人都想知道WHY this is happening

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

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

【讨论】:

  • 这里也一样 - 但为什么?这太令人沮丧了!
  • @rmirabelle Word 是否与 mysqli 如何处理 localhost 和 IPv6 有关。
【解决方案2】:

作为suggested by Tony:

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

[mysqld]
...
bind=127.0.0.1

【讨论】:

  • 我在 mysql-5.7.35-winx64 上得到 [ERROR] unknown variable 'bind=127.0.0.1' 但它可以使用 bind-address=127.0.0.1
【解决方案3】:

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

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

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

【讨论】:

  • 这是更好的答案,因为它更可取的是解决问题的根本原因,而不是使用与 localhost 等效的 IP。每台机器都应该知道 localhost 就是它自己。
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2010-11-20
  • 1970-01-01
  • 2013-02-28
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多