PHP到EasyPHP MySQL服务器1秒连接延迟

前端之家收集整理的这篇文章主要介绍了PHP到EasyPHP MySQL服务器1秒连接延迟前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在这里问这个问题,因为我认为它不仅仅适用于Easy PHP本身.

我目前使用EasyPHP作为我的WAMP开发服务器,所以我可以创建Web应用程序.问题是,当我得到MysqLi对象连接到数据库需要1秒.在共享托管结果上运行相同的查询速度超过200倍.这应该是我应该担心的事吗?在可扩展性或将应用程序移动到另一个服务器方面,花一点时间看看问题是否明智?我只是假设EasyPHP很慢.不是专业,只是让我感兴趣的东西.

如果您在Windows 7之前遇到此问题并使用Windows版本,这可能不是您的问题的答案.

为什么会发生这种情况?

这个问题的原因是IPv4与IPv6.

当您使用主机名而不是IP地址时,MysqL客户端首先为该名称运行AAAA(IPv6)主机查找,如果成功将名称解析为IPv6地址,则首先尝试此地址.如果任一步骤失败(名称解析或连接),它将回退到IPv4,运行A查找并尝试此主机.

这在实践中意味着如果IPv6本地主机查找成功,但是MysqL并未绑定到IPv6环回,则在发生IPv4回退之前,您将需要等待一个连接超时周期(显然在OP的计算机上为1秒)并且连接成功.

这不是Windows 7之前的一个问题,因为本地主机解析是通过hosts文件完成的,而且它预先配置了127.0.0.1 – 它没有附带它的IPv6对应的:: 1.

然而,由于Windows 7,因为本地主机解析器内置在DNS解析器中,原因如下:here.这意味着IPv6查找现在可以成功,但是MysqL并不绑定到该IPv6地址,因此连接将失败,您将看到这个问题概述的延迟.

这很好.告诉我如何解决它已经!

你有几个选择.围绕互联网,一般的“解决方案”似乎是明确使用IP地址而不是名称,但是有两个原因不能这样做,这两个可移植性相关,都可以说是不重要的:

>如果将脚本移动到仅支持IPv6的另一台机器,则脚本将不再起作用.
>如果您将脚本移动到基于* nix的托管环境,则魔术字符串localhost将意味着MysqL客户端更愿意使用Unix套接字(如果已配置),这比基于IP环回的连接更有效

他们听起来很重要吗?

他们不是您应该设计应用程序,以便在配置文件中定义此类事物.如果您将脚本移动到另一个环境,其他事情也需要配置.

总而言之,使用IP地址不是最好的解决方案,但最有可能是一个可以接受的解决方案.

那么最好的解决方案是什么?

最好的方法是更改​​MysqL服务器使用的绑定地址.但是,这并不像人们想要的那么简单.与Apache,Nginx和几乎所有其他理想的网络服务应用程序不同,MysqL支持单个绑定地址,因此不仅仅是添加另一个绑定地址.幸运的是,操作系统确实支持这里的一些魔法,所以我们可以使MysqL同时使用IPv4和IPv6.

您需要运行MysqL 5.5.3或更高版本,您需要使用–bind-address =命令行参数启动MysqL(或在my.ini中设置相应的选项).你有4个选项docs,具体取决于你想做什么:

>你可能熟悉的那个,你最有可能(有效地)使用0.0.0.0.这将绑定到机器上的所有可用的IPv4地址.这实际上可能不是最好的事情,即使你不关心IPv6,因为它具有与::相同的安全隐患.
>显式的IPv4或IPv6地址(例如127.0.0.1或for 1用于环回).这将服务器绑定到该地址,并且仅将该地址绑定.
魔术字符串::.这将在IPv4和IPv6模式下将MysqL绑定到机器上的每个地址,包括环回和物理接口地址.这可能是一个安全风险,只有当您需要MysqL接受来自远程主机的连接时,才能实现此目的.
>使用IPv4-mapped IPv6 address.这是一种内置于IPv6中的特殊机制,可在4 – > 6转换,它允许绑定到一个特定的IPv4地址,它的IPv6等效.对于“双回环”地址:: ffff:127.0.0.1以外的其他任何东西,这对你来说都是不太有用的.这对大多数人来说最有可能是最好的解决方案,只能绑定到环回,但允许IPv4和IPv6连接.

我需要修改hosts文件吗?

没有.不要修改hosts文件. DNS解析器知道如何处理本地主机,重新定义它最多没有任何效果,最坏的时候会混淆解决方案.

--skip-name-resolve怎么样?

这也可能解决解决问题所需的问题,相关但略有不同的原因.

没有此配置选项,MysqL将尝试通过PTR DNS查询将所有客户端连接IP地址解析为主机名.如果您的MysqL服务器已启用IPv6,但连接仍然需要很长时间,可能是由于反向DNS(PTR)记录配置不正确.

禁用名称解析将解决此问题,但它确实有其他后果,特别是配置为在主机条件下使用DNS名称的任何访问权限现在都将失败.

如果要执行此操作,您将需要配置所有授权以使用IP地址而不是名称.

原文链接:https://www.f2er.com/php/138340.html

猜你在找的PHP相关文章