MySQL 连接时尽量使用 127.0.0.1 而不是 localhost

2019-11-27 14:37:49 +08:00
 lihongjie0209

原因

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

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

因为你的本机中只有一个 mysql 进程, 如果你有一个 node1 运行在 3306, 有一个 node2 运行在 3307

mysql -u root -h localhost -P 3306
mysql -u root -h localhost -P 3307

都会连接到同一个 mysql 进程, 因为 localhost 使用 Linux socket, 所以 -P 字段直接被忽略了, 等价于

mysql -u root -h localhost 
mysql -u root -h localhost 

而 -h 默认是 localhost, 又等价于

mysql -u root 
mysql -u root 

为了避免这种情况(比如你在本地开发只有一个 mysql 进程,线上或者 qa 环境有多个 mysql 进程)最好的方式就是使用 IP

mysql -u root -h 127.0.0.1 -P 3307
15523 次点击
所在节点    MySQL
70 条回复
GoRoad
2019-11-27 14:55:24 +08:00
收藏了
lihongjie0209
2019-11-27 14:57:32 +08:00
@GoRoad #1 谢谢反馈
canyue7897
2019-11-27 14:58:39 +08:00
如果是 ipv6 呢? 127.0.0.1 就不行了吧!
chendy
2019-11-27 15:00:09 +08:00
MySQL 尽量不要和应用部署在一台机器上…
wiewiewie
2019-11-27 15:02:38 +08:00
谢谢 收了
lihongjie0209
2019-11-27 15:06:05 +08:00
@canyue7897 #3 写 ipv6 的地址就可以了
lihongjie0209
2019-11-27 15:06:53 +08:00
@chendy #4 我测试单机多进程主从同步时遇到的, 开发环境和 qa 环境可能会遇到这种情况
jxxz
2019-11-27 15:18:54 +08:00
确实,之前测试单机多实例登录的时候也发现了
jxxz
2019-11-27 15:21:13 +08:00
也可以指定 socket 文件,-S xxx.mysql.sock
ik
2019-11-27 15:21:49 +08:00
感谢分享
golden0125
2019-11-27 15:24:31 +08:00
优质内容
lihongjie0209
2019-11-27 15:28:56 +08:00
@jxxz #8 我做主从,发现不管怎么登陆都只能连接到 master, 查找了半天
tiedan
2019-11-27 15:31:57 +08:00
学习了
jxxz
2019-11-27 15:33:01 +08:00
@lihongjie0209 我当时没用 etc 下的默认 my.cnf 配置文件启动 mysql,结果用 localhost 多实例登录的时候提示找不到 /etc/my.cnf 配置文件中的指定的 socket 文件,才发现指定 localhost 都会走默认配置文件下的 socket
zhoushiya
2019-11-27 15:35:18 +08:00
我没研究那么多,只是测试中发现在 windows 下搭建的环境都用 127.0.0.1,在 linux VPS 上都用 localhost 就行了。。。在 windows 下用 localhost 那叫一个慢啊
lihongjie0209
2019-11-27 15:37:08 +08:00
@zhoushiya #15 警惕 windows ipv6 的问题,windows 是真的坑
xiangchen2011
2019-11-27 15:38:40 +08:00
学习到了。。。
ysn2233
2019-11-27 15:40:02 +08:00
我记得用 docker 的话只能 127.0.0.1 因为 localhost 走的是本地的 socks
killerv
2019-11-27 15:42:57 +08:00
支持
lululau
2019-11-27 15:43:00 +08:00
不管 3721 都走 TCP/IP,那 Unix Domain Socket 存在的意义是啥。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/623596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX