使用 localhost 无法连接 MySQL 数据库的解决方案

来源:互联网 发布:微信刷砍价软件 编辑:程序博客网 时间:2024/04/27 21:53

使用 localhost 无法连接 MySQL 数据库的解决方案

 

Tip:这几天在研究LAMP/WAMPdiscuz的时候却发觉在装mysqlphp的时候,用php连接mysql的时候死活连不上,我的代码如下:

<?php

   $conn=mysql_connect("localhost","root","5015557");//不能连接上

 // $conn=mysql_connect("127.0.0.1","root","5015557");//能连接上

 

   if($conn)

    {

     echo "success";

}

   else

   {

    echo "failed";

   }

?>

研究发现,用localhost连接的时候死活连不上(提示超时,曾经一度想要修改mysql的连接超时时间),而改用127.0.0.1连接的时候却轻松的连接上了后来才发现原来是IPV6的问题。

phpMyAdmin 是用 PHP 编写的基于 Web 的,最出色的 MySQL 数据库图形用户界面管理平台之一,通过它可以方便的对数据库进行操作,例如建立、复制、删除数据等等,输却无需逐字逐句地输入 SQL 命令。phpMyAdmin 的使用不是本文的重点,在作者刚刚接触这个软件时,配置是一个大问题(事实上对于很多初学者甚至熟练的程序员都一样),本文主要解决 Windows Vista  Windows 7 等平台下 phpMyAdmin 的连接问题。

在保证其它配置都完全正确的前提下,我发现自己的"服务器"Windows 7 32bit)始终无法正确连接到 MySQL 服务器。在网上搜索问题时发现有不少站长也遇到了同样的困惑,但却找不到解决方案。情况类似,无法使用"localhost"连接到 MySQL 服务器,而用 127.0.0.1 却可以。起初作者也弄不明白这是为什么,几乎绝大部分的网络教材都把 localhost 等同于 127.0.0.1 本地回环地址。而事实上是的,只是在 WinVista  Win7 下,localhost 有着另外一个更高层次的含义。

 Win7 命令提示符(CMD)下 Ping localhost 有如下结果:

正在 Ping WinSeven-PC [::1] 具有 32 字节的数据:
来自 ::1 的回复时间<1ms
来自 ::1 的回复时间<1ms
来自 ::1 的回复时间<1ms
来自 ::1 的回复时间<1ms

::1 
 Ping 统计信息
数据包已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失)
往返行程的估计时间(以毫秒为单位): 
最短 = 0ms,最长 = 0ms,平均 = 0ms

从上面可以清楚地看出环回没有问题,可是为什么 Ping localhost 回复地址却是"::1""::1"是什么东西?

原来自从 WinVista 开始,Windows 系统就默认开启了 IPv6 协议,而这个"::1"正是 IPv6 的环回地址(00:00:00:00:00:00:00:01 的压缩形式),但是 MySQL的常规版本并不支持通过 IPv6 连接,这该如何解决,难道要关闭 IPv6 协议吗?这是一种解决方法,不过也可以通过修改 host 来解决。

 WinVista  Win7  hosts 文件里可以看出,localhost 并没有直接被解析为 127.0.0.1 ,而是 DNS 将根据当前连接的协议来自动选择将其解析为 v4 地址还是 v6 地址:

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

而在此我们为了解决 localhost 的连接问题,可以给 host 加上这么一条,以告诉系统强制使用 IPv4 连接。直接在 hosts 文件的末尾加上

127.0.0.1 localhost

这一条语句(需要修改文件权限)。再次 Ping 一下 localhost

正在 Ping WinSeven-PC [127.0.0.1] 具有 32 字节的数据:
来自 127.0.0.1 的回复字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复字节=32 时间<1ms TTL=128
来自 127.0.0.1 的回复字节=32 时间<1ms TTL=128
127.0.0.1 
 Ping 统计信息:

数据包已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失)
往返行程的估计时间(以毫秒为单位): 
最短 = 0ms,最长 = 0 ms,平均 = 0ms

可以看出 localhost 已经被强制解析为 IPv4 的环回地址。觉得繁琐的网友,可以直接使用 127.0.0.1 替换 localhost 来连接,效果都是一样的,在性能上可能有所差异。另外最新版本的 phpMyAdmin 已经提供了图形界面的配置文件自动生成及下载功能,默认位于 phpMyAdmin/Setup/ 目录下,根据提示要求进行相应设置,然后将 config.inc.php 文件下载并放到 phpMyAdmin 根目录即可。

0 0
原创粉丝点击