龙空技术网

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

爱音乐的程序员小新人 8177

前言:

当前姐妹们对“虚拟机连接mysql数据库只能用127001”都比较讲究,我们都需要知道一些“虚拟机连接mysql数据库只能用127001”的相关资讯。那么小编也在网络上收集了一些有关“虚拟机连接mysql数据库只能用127001””的相关知识,希望各位老铁们能喜欢,小伙伴们快快来了解一下吧!

用localhost不能连上mysql,但用127.0.0.1却可以,是什么原因?

localhost 是走 socket 127.0.0.1 是走 3306端口

使用localhost连接失败的原因为在socket的方式下,php默认配置的mysql服务的socket文件不存在,所以导致连接失败,如果把连接失败的错误信息dump出来,你应该会看到错误信息中包含了“No such file or directory”。

------------------转自:----------------------------

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---------------------------------------------------

分析:这是典型的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进程。

标签: #虚拟机连接mysql数据库只能用127001 #查看本地mysql #mysql不能登陆 #mysql数据库需要联网吗