我在这里提问是因为我认为这不仅适用于EasyPHP本身。
目前,我使用EasyPHP作为我的WAMP开发服务器,以便创建Web应用程序。问题在于,当我获取mysqli对象连接到数据库时,它需要1秒钟的时间。 在共享托管上运行相同的查询会导致速度快200倍以上。这是我应该担心的事情吗?在可扩展性或将应用程序移动到另一台服务器方面,是否明智花些时间来查找问题所在?我只是假设可能EasyPHP很慢。这不是什么大问题,只是让我感到有趣。
localhost
解析功能,原因在这里概述。这意味着IPv6查找现在将成功,但是MySQL未绑定到该IPv6地址,因此连接将失败,并且您将看到本问题中概述的延迟。localhost
将意味着MySQL客户端优先使用Unix套接字(如果已配置),这比基于IP环回的连接更高效。--bind-address=
(或在my.ini中设置相应选项)启动MySQL。根据您想要做什么,您有4个选项docs。
您可能熟悉的是,也是您最有可能(有效地)使用的是0.0.0.0
。这将绑定到计算机上所有可用的IPv4地址。即使您不关心IPv6,这实际上可能并不是最好的选择,因为它与::
具有相同的安全风险。
显式的IPv4或IPv6地址(例如127.0.0.1
或::1
用于环回)。这会将服务器绑定到该地址,仅该地址。
魔术字符串::
。这将以IPv4和IPv6模式将MySQL绑定到计算机上的每个地址,包括环回和物理接口地址。这可能存在安全风险,只有在需要MySQL接受远程主机连接时才能这样做。
使用IPv4-mapped IPv6 address。这是IPv6中内置的一种特殊机制,用于在4 -> 6转换期间进行向后兼容,并允许您绑定到特定的IPv4地址及其IPv6等效地址。除了“双环回”地址::ffff:127.0.0.1
之外,这几乎不可能对您有用。这对于大多数人来说可能是最好的解决方案,只绑定到环回但允许IPv4和IPv6连接。
我需要修改hosts文件吗?
不需要。DNS解析器知道如何处理localhost
,重新定义它最多没有效果,最坏的情况会让解析器混乱不堪。
出于相关但略有不同的原因,这也可能修复问题/需要修复问题。
如果没有这个配置选项,MySQL将尝试通过PTR
DNS查询将所有客户端连接IP地址解析为主机名。如果您的MySQL服务器已经启用了IPv6但连接仍然需要很长时间,可能是因为反向DNS(PTR
)记录未正确配置。
禁用名称解析将解决此问题,但它确实有其他影响,特别是任何配置为在Host
条件中使用DNS名称的访问权限现在将失败。
如果您要这样做,您需要配置所有授权使用IP地址而不是名称。
当我使用localhost
作为MySQL服务器地址时,遇到了一些延迟。将其更改为127.0.0.1
有所帮助。
bind-address=::
(可选择让防火墙阻止远程访问)。 - marcovtwout[mysqld]
配置文件中有skip-host-cache
和skip-name-resolve
这两行。响应时间从4~5秒降至0.02毫秒。 - Shinebayar G