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 ov…

原因

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

代码100分

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

代码100分mysql -u root -h localhost 
mysql -u root -h localhost 

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

mysql -u root 
mysql -u root 

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

代码100分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"], [/* 25 vars */]) = 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"], [/* 25 vars */]) = 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 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10717.html

(0)
上一篇 2022-12-23
下一篇 2022-12-23

相关推荐

  • Python 3 datetime模块:操作日期和时间数据

    Python 3 datetime模块:操作日期和时间数据Python中的datetime模块是处理日期和时间数据的模块,可以以不同的格式表示日期和时间,并可以进行日期和时间的计算和比较。datetime模块中最常用的类是datetime类,它可以表示一个具体的日期和时间。

    2024-09-20
    20
  • lamp[亲测有效]

    lamp[亲测有效]lamp 1. lamp简介 有了前面学习的知识的铺垫,今天可以来学习下第一个常用的web架构了。 所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Py

    2023-05-29
    168
  • 使用PyQt5创建按钮

    使用PyQt5创建按钮Python是一门非常流行的开发语言,其生态系统非常丰富,可以用于多种领域,特别是GUI编程领域。而PyQt5是Python中最流行的桌面应用程序GUI开发框架,它是PyQt的最新版本,是一个完整的Python资源包,可以在各种平台上使用。PyQt5具有易于使用、具有一致性、具有现代感的基于Qt工具箱的图形用户界面,并支持各种平台和操作系统。在PyQt5中创建按钮可以实现许多功能,例如触发消息框、启动窗口等。本文将介绍如何使用PyQt5创建按钮。

    2024-09-22
    12
  • 03 SQL2005数据库备份和还原

    03 SQL2005数据库备份和还原1、数据库备份的意义硬件故障或误操作2、数据库的恢复模式(数据库属性——选项——恢复模式)完整:可恢复到数据库故障时间点或指定时间点大容量日志:数据库日志不记录对数据修改的时间,效率高,通过日志只能…

    2023-04-05
    178
  • Python时间格式化:%strftime指令详解

    Python时间格式化:%strftime指令详解时间格式在Python中是非常重要的,而strftime指令则是Python中非常关键的时间格式化指令。本文将从以下几个方面详细介绍strftime指令:

    2024-02-09
    92
  • Linux内核参数-共享内存「建议收藏」

    Linux内核参数-共享内存「建议收藏」在数据库配置过程中经常会遇到系统内核参数配置,而其中比较关键的有关于共享内存参数的配置,下面先将其中用到的参数的英文解释摘下来,再结合数据库再谈谈对其中的理解。 kernel.shmall This…

    2023-01-26
    138
  • Sql: Oracle paging「建议收藏」

    Sql: Oracle paging「建议收藏」

    2022-12-28
    184
  • 使用Python创建多层文件夹的方法

    使用Python创建多层文件夹的方法对于科学家、程序员和数据分析师来说,文件处理是日常工作中不可避免的一部分。在这个过程中,有时候需要创建多层嵌套的目录,这就需要用到 python 创建多级目录的方法。在本文中,我们将为大家介绍如何使用 Python 创建多层文件夹的方法。

    2024-02-19
    89

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注