为什么用localhost连不上mysql,用127.0.0.1却可以

用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进程。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值