bfchengnuo / MyRecord

平时充电做的笔记,一个程序猿的自我修养.
https://bfchengnuo.com/MyRecord/
33 stars 8 forks source link

MySQL连接localhost与127.0.0.1区别 #45

Closed bfchengnuo closed 4 years ago

bfchengnuo commented 4 years ago

Whenever you specify "localhost" or "localhost:port" as server, the MySQL client library will override this and try to connect to a local socket (named pipe on Windows). If you want to use TCP/IP, use "127.0.0.1" instead of "localhost". If the MySQL client library tries to connect to the wrong local socket, you should set the correct path as in your PHP configuration and leave the server field blank.

localhost 使用的 Linux socket,127.0.0.1 使用的是 tcp/ip


Q:为什么我使用 localhost 一直没出问题?

A:因为你的本机中只有一个 mysql 进程, 如果你有一个 node1 运行在 3306, 有一个 node2 运行在 3307; 那么都会连接到同一个 mysql 进程, 因为 localhost 使用 Linux socket, 所以 -P 字段直接被忽略了

这是 linux 套接字网络的特性,win 平台不会有这个问题; 如果非要用,可以尝试在 my.cnf[mysql] 区段里添加 protocol=tcp

bfchengnuo commented 4 years ago

所以,你可能会遇到使用 localhost 死活连不通,使用 127.0.0.1 却正常。

需要注意 % 和 localhost 的配置,简单来说,% 是一个通配符,用以匹配所有的 IP 地址,但是不能匹配到 locahost 这个特殊的域名

也就是说,如果要允许本地登录,单纯只配置一个 % 是不够的 (应该是说对这种方式是不够的),需要同时配置一个 locahost 的账号。

https://jin-yang.github.io/post/mysql-localhost-vs-127.0.0.1-introduce.html

bfchengnuo commented 4 years ago

localhot(local) 是不经网卡传输!这点很重要,它不受网络防火墙和网卡相关的的限制,因此也不占用网卡的资源。

127.0.0.1 是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制。

未查证