我在这里问这个问题,因为我认为它不仅仅适用于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地址而不是名称.

PHP到EasyPHP MySQL服务器1秒连接延迟的更多相关文章

  1. 吃透移动端 Html5 响应式布局

    这篇文章主要介绍了吃透移动端 Html5 响应式布局,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. App store拒绝应用程序在iOs 10上支持IPV6网络

    我收到苹果公司的app拒绝邮件,下面是我们在连接到IPv6网络的Wi-Fi上运行iOS10.0.2的iPad和iPhone上查看了应用中的一个或多个错误.具体来说,应用程序在启动时仍保留在启动屏根据他们的要求,我已经在我的Mac上创建了NAT64网络,并为iPhone5S设备10.0.2os版本共享了互联网,App工作正常,但苹果称其不与IPv6合作任何人都可以确认我需要检查其他什么吗?

  3. 如何在iOS上快速将ALAsset映像保存到磁盘?

    我正在使用ALAsset来检索这样的图像:这返回CGImageRef,我想尽快保存到磁盘…解决方案1:解决方案2:问题是两种方法在设备上的执行速度都很慢.每张图片大约需要2秒才能执行此操作.这绝对是长久的.问题:如何加快图像保存过程?或许还有更好的解决方案吗?

  4. ios – 根据大小类更改约束的乘数

    根据当前的大小类,可以给出一个不同乘数的约束吗?我有一个看法,我想要的是一般尺寸类宽度的一半的屏幕尺寸,我希望它是一个紧凑的尺寸类宽度的屏幕尺寸的80%.在故事板中,我可以选择将不同大小的类别的不同变量添加到约束常量值,但不是乘数值.这是相等的宽度限制.我没有在程序上添加约束,所以我希望他们可能是一个解决方案,在这条路上.任何人都可以告诉我是否可以通过故事板或编程方式来做我正在寻找的内容?

  5. 需要适用于iOS 9的IPv6组播C代码

    苹果现在要求iOS9应用符合IPv6.我们几乎可以,除了一些发送UDP广播的代码–现在在iOS9中失败了.我看到的一切告诉我,UDP组播是在IPv6中这样做的正确方法.我已经找到一些示例代码,但是在我尝试过的任何版本的iOS或MacOSX上都无效.这个代码是从我们程序中的C/C++lib调用的–很难回调到Swift,Obj-C,Java等.这段代码将由我们的应用程序的MacOSX和Android版本共享.有人会认为可以在任何POSIX环境中的C中进行IPv6组播!

  6. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  7. 是否可以从我的iOS应用程序包中删除文件?

    解决方法无法删除捆绑包中的文件.必须对应用程序进行签名,如果以任何方式修改了包,它将不会通过签名.我能想到的唯一其他解决方案是设置Web服务,并让您的应用程序根据需要下载部分内容.这可能是也可能不是可行的解决方案,具体取决于您的应用实际执行的操作.

  8. Swift40/90Days - 用函数式编程解决逻辑难题

    Swift90Days-用函数式编程解决逻辑难题这篇翻译的文章,用两种方法解决了同一个逻辑难题。第二种方法利用了Swift的一些语言特性,实现了函数式编程的解决方案。这样的代码对于指令式编程来说再平常不过,接下来我们就来看下如何用函数式编程解决这个问题。Swift中函数已经是一等公民,这让高阶函数变成可能,也就是说,一个函数可以是通过其它函数组装构成的。思考Swift对于函数式编程的支持让我感觉的兴奋,Excited!

  9. 关于oc和swift混编 框架framework时 只能在真机运行或只能在模拟器单独运行的解决方案

    问题描述:关于oc和swift混编框架framework时只能在真机运行或只能在模拟器单独运行的解决方案。

  10. swift学习2 元组 tuples

    swift中出现了一种新的数据结构,非常牛掰的元组tuples如果懂PHP的猿,会发现这个元组和PHP的数组非常类似,同样是可以默认不指定key,也可以指定key目前的学习疑问是,如何进行元组的遍历?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部