的mysql_connect(本地主机/ 127.0.0.1)慢于Windows平台(mysql_c

2019-06-26 13:23发布

我使用的是Windows 7,阿帕奇2,PHP 5中,MySQL 5,所有人都在同一台机器上。 我发现一个有趣的问题,我有以下代码:

    $sql = "select * from user1";
    $conn = mysql_connect("localhost", "root", "xxxxxxxx");
    mysql_select_db("test1");
    mysql_query("set names utf8");
    $result = mysql_query($sql, $conn);
    while ($row = mysql_fetch_assoc($result)){
        foreach ($row as $key => $value){
            echo $key." => ".$value." || ";
        }
        echo "<br/>";
    }
    mysql_free_result($result);
    mysql_close($conn);

的运行时间的上面的代码是在1秒。

当我使用127.0.0.1而不是localhost ,运行时间大约是10毫秒。

我试图在互联网上找到的根本原因,这就是结果:

我最近搬到从XP我发展到Windows 7,发现我所开发的网页分别取5秒长加载。 这是不能接受的,当然,所以我不得不追查问题。 我终于找到了有问题的函数/法PDO ::结构。 我还发现的mysql_connect正在采取约1秒进行连接。 有点谷歌搜索后,我发现一个交代说PHP有问题与IPv6和你既可以由关闭IPv6解决问题或者使你的连接时切换到ip地址127.0.0.1。

我想知道的IPv6对PHP的问题,只是想获得一个更深入的understaning。 谢谢。

Answer 1:

PHP正试图打开到本地主机的连接。 由于您的计算机通过IPv6连接到您的网络它试图“localhost”的第一个,这是IPv6的版本,它是:: 1的IP地址

http://en.wikipedia.org/wiki/IPv6_address#Special_addresses

:: 1/128 - 回送地址是单播本地主机地址。 如果在宿主应用程序发送数据包到该地址,所述IPv6堆栈将环回到同一个虚拟接口上这些分组(对应于127.0.0.0/8 IPv4中)。

它看起来像你的MySQL服务器未侦听到该地址,而不是它的唯一绑定到一个IPv4地址,因此一旦PHP无法打开它回落的连接,并尝试通过IPv4到本地主机打开127.0.0.1又名

我个人更喜欢使用任何IP地址或使用乙醚Windows主机文件或Mac相当于界定“假”的域名,然后连接到MySQL时,它决心IP地址使用的。 无论哪种方式,我完全是一个IPv4或IPv6地址是否将使用知道。

MySQL和Apache的支持IPv6的,但你必须告诉他们明确地使用IPv6地址。 对于MySQL看到: http://dev.mysql.com/doc/refman/5.5/en/ipv6-server-config.html

对于Apache配置看: http://httpd.apache.org/docs/2.2/bind.html

Apache支持多个IP地址,因此您可以同时使用这两种 - 如果在本机的网络卡同时具有IPv4和IPv6地址。 MySQL只支持一个地址。



Answer 2:

PHP是试图连接到“localhost”的在Windows 10年7月8日是:: 1,但MySQL是不听IPv6的插槽,你可以申请几个修补程序:

1)在你的主机文件(C:/窗/ SYSTEM32 /驱动器的/ etc /主机)设置本地主机为127.0.0.1

2)在PHP MySQL服务器从localhost 127.0.0.1变化

3)在my.ini中,添加或编辑:绑定地址= ::

如果地址::,服务器接受所有服务器主机的IPv4和IPv6接口的TCP / IP连接。 用该地址允许所有服务器接口的IPv4和IPv6连接。

建议选择,如果你有MySQL的> = 5.5.3



文章来源: mysql_connect (localhost / 127.0.0.1) slow on Windows platform