用localhost不能连上MySQL,但用127.0.0.1却可以,是什么原因?
localhost 是走 socket 127.0.0.1 是走 3306端口
http://www.jeepshoe.org/651195202.htm
使用localhost连接失败的原因为在socket的方式下,php默认配置的mysql服务的socket文件不存在,所以导致连接失败,如果把连接失败的错误信息dump出来,你应该会看到错误信息中包含了“No such file or directory”。
------------------转自:http://my.oschina.net/fhd/blog/500778----------------------------
localhost也叫local ,正确的解释是:本地服务器。127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器),他们的解析通过本机的host文件,windows自动将localhost解析为127.0.0.1。localhot(local)是不经网卡传输!这点很重要,它不受网络防火墙和网卡相关的的限制。127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制。一般设置程序时本地服务用localhost是最好的,localhost不会解析成ip,也不会占用网卡、网络资源,防火墙对其不起作用,端口全开放。有时候用localhost可以,但用127.0.0.1就不可以的情况就是在于此。猜想localhost访问时,系统带的本机当前用户的权限去访问,而用ip的时候,等于本机是通过网络再去访问本机,可能涉及到网络用户的权限。
localhost 127.0.0.1本机IP网络不联网不联网联网传输不使用网卡,不受防火墙限制 网卡传输,受防火墙和网卡限制 网卡传输,受防火墙和网卡限制访问本机访问本机访问本机或外部访问
-----------------------over---------------------------------------------------
http://yubosun.akhtm.com/tech/mysql-localhost.htm
分析:这是典型的socket没有正确设置的情况。
连接MySQL数据库有两种方式:TCP/IP(一般理解的端口的那种)和Unix套接字(一般叫socket或者sock)。大部分情况下,可以用localhost代表本机127.0.0.1,但是在MySQL连接时,二者不可混用,而且MySQL中权限设置中localhost与127.0.0.1也是分开设置的。当设置为127.0.0.1时,系统通过TCP/IP方式连接数据库;当设置为localhost时,系统通过socket方式连接数据库。
解决:首先要看本机MySQL的socket套接字文件在哪里,查看命令是:
<span style="color:#455353"><span style="color:#333333"><span style="color:#000000">mysqld </span><span style="color:#666600">--</span><span style="color:#000000">verbose </span><span style="color:#666600">--</span><span style="color:#000000">help </span><span style="color:#666600">|</span><span style="color:#000000"> grep socket</span></span></span>
输出结果显示套接字文件的位置,比如:这台服务器显示的是
<span style="color:#455353"><span style="color:#333333"><span style="color:#000000">socket </span><span style="color:#666600">/</span><span style="color:#000088">var</span><span style="color:#666600">/</span><span style="color:#000000">run</span><span style="color:#666600">/</span><span style="color:#000000">mysqld</span><span style="color:#666600">/</span><span style="color:#000000">mysqld</span><span style="color:#666600">.</span><span style="color:#000000">sock</span></span></span>
然后修改php的配置文件php.ini与之对应起来就好了。
找到这一项:
<span style="color:#455353"><span style="color:#333333"><span style="color:#000000">mysql</span><span style="color:#666600">.</span><span style="color:#000000">default_socket </span><span style="color:#666600">=</span></span></span>
一般来说这一项都是空的,改成:
<span style="color:#455353"><span style="color:#333333"><span style="color:#000000">mysql</span><span style="color:#666600">.</span><span style="color:#000000">default_socket </span><span style="color:#666600">=</span> <span style="color:#008800">/var/</span><span style="color:#000000">run</span><span style="color:#666600">/</span><span style="color:#000000">mysqld</span><span style="color:#666600">/</span><span style="color:#000000">mysqld</span><span style="color:#666600">.</span><span style="color:#000000">sock</span></span></span>
这里应写上一步查询到的文件,根据你的情况设置。至此php配置就修改好了,如果是CLI(命令行)方式或者CGI方式的话,立即就生效,如果是FASTCGI方式,需要重启一下fastcgi进程。