Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

    • MySQL的权限控制
    • 精细权限管制示例
    • localhost和127.0.0.1的区别-MySQL
    • mysql数据类型
    • 当前读和快照读
    • MySQL中MVCC的实现原理
    • MySQL中MVCC具体用了多少个隐藏字段
    • 锁和事务的关系
    • FOR UPDATE锁类型
  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

  • 数据结构

  • 算法

  • OJ

  • 从道家哲学看计算机?
  • 后端
  • MySQL
plantre
2025-05-03

localhost和127.0.0.1的区别-MySQL

在 MySQL 中,localhost 和 127.0.0.1 虽然都指向本机,但在协议、权限管理、连接方式等方面存在显著区别。以下是具体分析:


一、协议与连接方式的区别

  1. 连接协议不同
    • localhost:默认使用 Unix Socket(类 Unix 系统)或命名管道(Windows)连接。这种连接方式不经过网卡,直接通过操作系统内核通信,不受网络防火墙限制,速度更快。

    • 127.0.0.1:强制使用 TCP/IP 协议,通过网卡传输,依赖网络配置,可能受防火墙或网络策略影响。

    示例验证:

    -- 通过localhost连接
    mysql -h localhost -u root -p
    -- 状态显示:Connection: Localhost via UNIX socket
    
    -- 通过127.0.0.1连接
    mysql -h 127.0.0.1 -u root -p
    -- 状态显示:Connection: 127.0.0.1 via TCP/IP
    
    1
    2
    3
    4
    5
    6
    7
  2. 网络传输路径
    • localhost 的通信完全在操作系统内部完成,不经过物理或虚拟网卡。

    • 127.0.0.1 虽然指向本机,但数据包仍需通过网卡的回环接口(loopback interface)处理。


二、权限管理的区别

  1. 用户权限独立
    在 MySQL 中,用户由 用户名@主机 组成,因此:
    • 'user'@'localhost' 和 'user'@'127.0.0.1' 是两个独立的用户,需分别授权。

    • 即使密码相同,若未显式授权 127.0.0.1,可能导致连接失败。

    验证方法:

    SELECT User, Host FROM mysql.user;
    -- 结果可能包含两行:
    +------+-----------+
    | User | Host      |
    +------+-----------+
    | root | localhost |
    | root | 127.0.0.1 |
    +------+-----------+
    
    1
    2
    3
    4
    5
    6
    7
    8
  2. 权限匹配优先级
    MySQL 按以下顺序匹配权限:

    1. 'user'@'localhost'
    2. 'user'@'127.0.0.1'
    3. 'user'@'%'(通配符主机)
      若 localhost 用户存在,优先匹配,可能忽略 127.0.0.1 的权限。

三、应用场景与常见问题

  1. 开发环境问题
    • PHP/Web 连接失败:使用 localhost 时,若 PHP 未正确配置 Unix Socket 路径(如 /var/run/mysqld/mysqld.sock),会导致连接失败。改用 127.0.0.1 强制 TCP/IP 可解决。

    • 跨域问题(CORS):浏览器认为 localhost 和 127.0.0.1 是不同源,需统一前后端使用的地址。

  2. 服务监听配置
    • 若服务仅监听 localhost,外部无法通过 127.0.0.1 或公网 IP 访问。需改为 0.0.0.0 以接受所有来源。

  3. IPv6 兼容性
    • localhost 在 IPv6 中解析为 ::1,而 127.0.0.1 仅适用于 IPv4。若系统启用 IPv6,需显式配置兼容性。


四、性能与安全性

  1. 性能差异
    • Unix Socket 比 TCP/IP 更快,因省去了协议栈封装和网络层处理。

    • 127.0.0.1 需经过完整的 TCP 握手过程,适合需要模拟网络环境的场景。

  2. 安全限制
    • localhost 连接不受网络防火墙限制,但依赖操作系统权限。

    • 127.0.0.1 可能受防火墙规则拦截(如关闭 3306 端口)。


五、总结与建议

对比项 localhost 127.0.0.1
协议 Unix Socket/命名管道 TCP/IP
权限独立性 独立用户(需单独授权) 独立用户(需单独授权)
网络传输 不经过网卡 经过网卡回环接口
防火墙影响 不受限制 可能被拦截
适用场景 本地开发、高性能需求 模拟网络环境、跨主机测试

建议:

  1. 本地开发优先使用 localhost 以提升性能。
  2. 统一权限配置时,同时创建 'user'@'localhost' 和 'user'@'127.0.0.1'。
  3. 遇到连接问题时,检查防火墙、MySQL 配置(如 skip_name_resolve)和用户权限。
编辑 (opens new window)
上次更新: 2025/06/13, 00:51:28
精细权限管制示例
mysql数据类型

← 精细权限管制示例 mysql数据类型→

最近更新
01
集成loki
07-04
02
TCP的ESTABLISHED是什么意思
06-24
03
安装1panel
06-24
更多文章>
Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式