环境:centos 7.3 8核32G
过程:通过NFS实现不同云服务器间远程挂载目录。在配置挂载/tmp/目录时,由于NFS的共享目录的权限设定。导致mysql无法在/tmp目录下写入mysql.sock,程序无法找到/tmp/mysql.sock。
解决办法:临时修改代码localhost为127.0.0.1,并且对127.0.0.1赋相同权限。凌晨3点以后重启mysql,生成/tmp/mysql.sock
原因:
1.一种说法是。
linux下,mysql的localhost默认是指unix socket。看看mysql的配置文件,在mysqld那一部分你的mysqld打开的unix socket放在哪里,一般是/tmp/mysql.sock之类的,再看看mysql(客户端)默认是去哪儿找unix socket(看看/etc/mysql.conf的配置,mysql那一部分中默认unix socket的路径,实在不行对mysqld用lsof,对mysql用strace看看丫的究竟open调用打开哪个文件去了),这两个如果对不上,那就连不上。 127.0.0.1对mysql来说指的是tcp socket。
2.另一种说法是,有待考证。
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的时候,等于本机是通过网络再去访问本机,可能涉及到网络用户的权限。
可以确定的,mysql在使用127.0.0.1时,走的是tcp/ip协议栈,即端口通信。