V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
JiaFeiX
V2EX  ›  问与答

是真的吗? Linux 下 mysql 使用 localhost 比 127.0.0.1 快

  •  
  •   JiaFeiX · 2016-11-15 10:15:21 +08:00 via iPhone · 5111 次点击
    这是一个创建于 2930 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 码农翻身 公众号上,看到如下信息:

    [有意思的例外就是 mysql , 在 Linux 上, 当你使用 localhost 来连接数据库的时候, Mysql 会使用 Unix domain socket 来传输数据, 这种方式会快一些, 因为这是一种进程内通信(IPC)机制, 不走网络协议栈, 不需要打包拆包, 计算校验和,维护序号等操作。
    当你使用 127.0.0.1 的时候, mysql 还是会使用 TCP/IP 协议栈来进行数据传输。]

    请问这一描述是真的吗?
    20 条回复    2016-11-16 07:03:31 +08:00
    choury
        1
    choury  
       2016-11-15 10:23:26 +08:00 via Android
    理论上是,但是实际上现在 linux 下面 127.0.0.1 也不走 tcp 了,关键是本机跑的话瓶颈真的在网络?
    uxstone
        2
    uxstone  
       2016-11-15 10:26:18 +08:00
    都 localhost 了,在乎这点速度?
    lhbc
        3
    lhbc  
       2016-11-15 10:42:02 +08:00 via iPhone
    1. localhost=127.0.0.1

    /etc/hosts
    127.0.0.1 localhost

    2. lo 口已经不走 TCP/IP
    JiaFeiX
        4
    JiaFeiX  
    OP
       2016-11-15 10:48:13 +08:00
    @choury [现在 linux 下面 127.0.0.1 也不走 tcp ] 请问这个是从哪个版本变更的? 是内核某个版本变更的吗?
    panda1001
        5
    panda1001  
       2016-11-15 11:33:15 +08:00 via Android
    读 hosts 的时间算不算
    jarlyyn
        6
    jarlyyn  
       2016-11-15 11:37:15 +08:00
    一般走 localhost 的话是走 socket 套接字,不走 tcp/ip.
    kslr
        7
    kslr  
       2016-11-15 12:13:06 +08:00 via Android
    这些公众号真是抄来抄去的。
    ms2008
        8
    ms2008  
       2016-11-15 12:14:39 +08:00   ❤️ 4
    是对的,但是仅限使用 MySQL 自己的客户端连接

    你如果使用 php 或者其他语言,其实还是要走 tcp 的

    http://dev.mysql.com/doc/refman/5.7/en/connecting.html

    > On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port or -P option is given to specify a port number.
    herozzm
        9
    herozzm  
       2016-11-15 12:16:12 +08:00 via Android
    /etc/hosts 里面内容怎么解释
    wwqgtxx
        10
    wwqgtxx  
       2016-11-15 14:33:10 +08:00 via iPhone
    @herozzm 他都不走 tcp/ip 栈,谁还管你 host 文件
    Zzzzzzzzz
        11
    Zzzzzzzzz  
       2016-11-15 14:37:10 +08:00
    @ms2008 php 自己搞的 mysqlnd 用 localhost 也是走 unix socket 的
    JiaFeiX
        12
    JiaFeiX  
    OP
       2016-11-15 14:54:45 +08:00
    @ms2008 文档看到了,非常感谢。 on UNIX 情况明了了。 其他语言的客户端,走 TCP ,请问这一句的来源是?
    jarlyyn
        13
    jarlyyn  
       2016-11-15 15:00:07 +08:00
    @herozzm

    这和 hosts 没关系。

    mysql 客户端默认用 localhost 的话走套接字。

    最典型的是,如果客户端配置不对的话,通过 127.0.0.1 因为是走 3306 端口,可以正常访问,而走 localhost 由于走套接字,接口文件路径错误,会无法连接。

    与解析没关系。
    phoenixlzx
        14
    phoenixlzx  
       2016-11-15 15:20:11 +08:00 via iPhone
    其他客户端走不走 socket 要看实现了吧...
    ms2008
        15
    ms2008  
       2016-11-15 15:23:36 +08:00
    @JiaFeiX 我说的

    其实区别是通过 domain socket 还是走 TCP ,只需要 show processlist; 就能看出来

    只要 host 那列是这种格式 localhost:24673 ,后面又端口的,都是 TCP

    domain socket 的话只会显示 localhost
    cnscud
        16
    cnscud  
       2016-11-15 17:38:05 +08:00
    有意思... 公司穷的只有一台服务器了?
    lslqtz
        17
    lslqtz  
       2016-11-15 18:28:01 +08:00
    有 hosts 时使用当然用 hosts...
    mysql 客户端用啥 jarlyyn 说的很清楚了。。
    有 hosts php 就根据 hosts 来走咯。。
    xjp
        18
    xjp  
       2016-11-15 18:36:09 +08:00 via iPhone
    是的 所以使用 localhost 的时候会忽略端口号 不信你试试 改端口看看 都能连上
    Joway
        19
    Joway  
       2016-11-15 23:59:30 +08:00   ❤️ 1
    靠这种底层细微的优化其实根本无意义, 你优化完了这个, 还有调整内核参数, 调整各种调度算法等等一系列优化呢 , 然而这种东西再怎么优化,上层代码写得差还是全毁了
    eyp82
        20
    eyp82  
       2016-11-16 07:03:31 +08:00   ❤️ 1
    做优化的一个大前提, 是先对性能指标进行测量, 找到最该优化的环节.
    在这个场景下, 很多时候性能瓶颈在 I/O, 本机即使走 TCP/IP 协议栈, 以 CPU 的速度, 拆包打包的速度甩 I/O 一万条街不止.
    所以, 其实是个伪命题...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2613 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:23 · PVG 23:23 · LAX 07:23 · JFK 10:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.