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 条回复
alphadog619
2019-11-28 15:26:07 +08:00
我司一款 B/S 软件,配置文件写 127.0.0.1 死活连不上 SQL,写成 localhost 就没问题。
PhyllisLin
2019-11-28 15:35:09 +08:00
前几天搭,,HBase 集群迁移数据实验遇到过类似的问题,已经给 local host 赋权了,可偏偏连不上,要用主机名才行。真的坑,不知道是不是题主的这个原因。
lihongjie0209
2019-11-28 15:42:07 +08:00
@alphadog619 #61 估计是只支持 unix socket 连接
walpurgis
2019-11-28 15:50:15 +08:00
做过运维的表示,这基本上算是常识
lihongjie0209
2019-11-28 16:04:55 +08:00
@walpurgis #64 对于搞网络和开发的表示这很反常识
lzp1205186344
2019-11-28 16:07:43 +08:00
dnsaq
2019-11-29 09:04:38 +08:00
无论什么场景域名优先级永远比 ip 高,不用 localhost 的花建议用内部 dns 分配的域名,便于调度管理
waterlaw
2019-12-08 20:27:55 +08:00
win10 下复制 mysql 目录(数据目录除外),改了 mysql 端口, 开启了两个服务,使用 localhost 和不同端口连接是不同的,不知道楼主怎么一个 MySQL 服务开启两个进程的,是改了配置文件又开了另一个服务吗?
adeng
2023-05-18 12:35:43 +08:00
卧槽, 怪不得我想导出 Linux 上 docker 部署的 MySQL 数据时, 只要用 localhost, 错误端口都能导出数据, 而用域名时, 只有正确端口, 原来是这样
mh494078416
338 天前
学到了

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

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

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

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

© 2021 V2EX