繁体   English   中英

mysql_connect(localhost / 127.0.0.1)在Windows平台上运行缓慢

[英]mysql_connect (localhost / 127.0.0.1) slow on Windows platform

我使用的是Windows 7,Apache 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 :: construct。 我还发现mysql_connect大约需要1秒才能建立连接。 经过一番谷歌搜索后,我发现一个解释说明php存在IPv6问题,你可以通过在建立连接时禁用IPv6或切换到ipaddress 127.0.0.1来解决问题。

我想知道PHP上的IPv6问题是什么,只是想深入了解。 谢谢。

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

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

:: 1/128 - 环回地址是单播本地主机地址。 如果主机中的应用程序将数据包发送到此地址,则IPv6堆栈将这些数据包循环回同一虚拟接口(对应于IPv4中的127.0.0.0/8)。

看起来你的MySQL服务器没有监听那个地址,而是只绑定到IPv4地址,所以一旦PHP无法打开连接,它就会退回并尝试通过IPv4又名127.0.0.1打开localhost

我个人更喜欢使用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地址,因此您可以同时使用两个IP地址 - 如果计算机中的网卡同时具有IPv4和IPv6地址。 MySQL只支持一个地址。

PHP正在尝试连接到Windows 7/8/10中的“localhost”它是:: 1,但是MySQL没有侦听IPv6套接字,你可以应用几个修复:

1)在您的主机文件(C:/ windows / system32 / drivers / etc / host)中将localhost设置为127.0.0.1

2)在PHP中,MySQL服务器从localhost更改为127.0.0.1

3)在my.ini中,添加或编辑:bind-address = ::

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM