按道理来说,本地数据库和联网没有任何关系,为什么连不上呢?

关键就是本地数据库连接时的设置,最好别设成localhost,设成127.0.0.1。

一、问题场景

在不联网的情况下:

配置时填写localhost:

配置填写127.0.0.1:

但是,只要联网,就算使用localhost也不会出现问题,而127.0.0.1则从始至终没有任何问题。

也就是说,问题出在localhost上,需要弄清楚两者的区别。

二、这两者的根本区别在哪里?

有人会说127.0.0.1是本地ip,也有人说,用127.0.0.1比localhost好,可以减少一次解析。

虽说效果看起来是一样的,都是本地IP,但实际上区别很大:

localhost的意思是本地服务器,而127.0.0.1是本机地址,他们的关系是通过操作系统中的hosts文件,将localhost解析为127.0.0.1。

而实际工作中,localhost是不经过网卡传输的,所以,它不受网络防火墙和与网卡相关的种种限制。而127.0.0.1则要通过网卡传输数据,是必须依赖网卡的。这一点是它们最大的区别(如果没有网卡,是不是127.0.0.1就不起作用了?存疑)。

一般设置程序时,本地服务用localhost是最好的,localhost不会解析成IP,也不会占用网卡、网络资源。有时候用localhost可以,但用127.0.0.1就不可以的情况就是在于此。

三、理解一下

怎么好像反了过来啊,明显是localhost比较好吧,不是不通过网卡就能解析吗?

慢着,注意“他们的关系是通过操作系统中的hosts文件,将localhost解析为127.0.0.1”这段话。localhost的解析,需要经过hosts文件处理。

那么问题很可能出在本地的hosts文件咯。

我的hosts文件位置:

结果发现localhost对应的地址是空的!不知道什么原因,hosts文件被修改了,导致localhost无法解析为127.0.0.1。

后来在网上搜了一下默认hosts文件,重新把localhost解析回127.0.0.1,就没有再出现这个问题了。

如果出现了“不联网就连不上mysql的问题”,记得查看一下hosts文件,或者更改本地连接地址。

四、总结

这个BUG有点坑人。