我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

原因

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
第 1 条附言  ·  3 小时 55 分钟前  

使用strace查看:


strace mysql -h localhost -P 3306 -u root &> /tmp/strace_mysql.txt

结果:


execve("/opt/app/mysql/bin/mysql", ["mysql", "-h", "localhost", "-P", "3306", "-u", "root"], []) = 0

......


socket(AF_LOCAL, SOCK_STREAM, 0)        = 3
connect(3, {sa_family=AF_LOCAL, sun_path="/tmp/mysql.sock"}, 110) = 0 // 这里
setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = -1 EOPNOTSUPP (Operation not supported)
setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0

第 2 条附言  ·  3 小时 52 分钟前  

使用ip地址的strace

strace mysql -h 127.0.0.1 -P 3306 -u root &> /tmp/strace_mysql_use_ip.txt
execve("/opt/app/mysql/bin/mysql", ["mysql", "-h", "127.0.0.1", "-P", "3306", "-u", "root"], []) = 0


....



socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

原因 Whenever you specify "localhost" or "localhost:port" as server, the MySQL client library will override this and try to conne
2020-01-02

为什么MySQL使用7天2小时这样的间隔而不是7天2小时?

这个概念背后的原因是MySQL要求单位关键字是单数,无论英语语法规则如何。如果我们尝试提供 7 天、2 小时等间隔,那么 MySQL 将产生语法错误,如下所示 -mysql> Select 2017-02-25 05:04:30 + INT
2023-10-22

在创建MySQL表时,如何指定我选择的存储引擎而不是使用默认的存储引擎InnoDB?

创建MySQL表时,可以按如下方式指定存储引擎 -mysql> CREATE TABLE Student(id INTEGER PRIMARY KEY, Name VARCHAR(15))-> ENGINE = MyISAM;Query
2023-10-22

编程热搜

目录