使用主机设置为127.0.0.1和localhost添加到mysql中的用户有什么区别?

4
我注意到root用户的条目总是有两个,一个主机设置为127.0.0.1,另一个主机设置为localhost。我的问题是为什么会有两个条目,如果包括MACHINE_NAME::1就变成了四个?其中MACHINE_NAME是实际机器名称,比如appServer2。
我一直在想为什么会有多个条目。是否存在localhost不解析为127.0.0.1的机器?是否有运行mysql会尝试通过服务器的“外部”接口连接的情况?
我以前看过这个问题,但没有人回答为什么'127.0.0.1'和'localhost'总是单独列出来。

它们是分开的,因为您不需要将本地主机设置为127.0.0.1,但这是默认设置。对于99%的人来说,它是相同的,但如果出于某种原因您希望更改本地主机的含义,则可以这样做。 - JoshKopen
1
在Unix系统上的MySQL中,主机名“localhost”具有特殊含义。在MySQL中,“user@localhost”永远不会解析为IP地址,无论是127.0.0.1还是其他。它标识了通过本地Unix套接字文件进行的连接。 - spencer7593
1个回答

5
在Unix系统上的MySQL中,localhost是一个特殊的值。它用于通过本地套接字识别连接,而不是TCP/IP。
(令人困惑的是,在MySQL之外,主机名localhost通常解析为IP地址127.0.0.1。为避免混淆,请将MySQL中的“localhost”视为意义完全不同的内容。它最好被命名为“local_socket_connection”。)
这些是单独的条目,因为“localhost”永远不会引用TCP/IP连接,而IP地址永远不会引用本地套接字。
参考资料:https://dev.mysql.com/doc/refman/5.7/en/connecting.html 默认主机名是localhost。在Unix上,这具有特殊含义,稍后会进行描述。
在Unix上,MySQL程序以一种可能与其他基于网络的程序不同的方式特殊处理主机名localhost。对于连接到localhost的情况,MySQL程序尝试使用Unix套接字文件连接到本地服务器。即使指定了--port-P选项来指定端口号,也会发生这种情况。要确保客户端对本地服务器进行TCP/IP连接,请使用--host-h来指定主机名值为127.0.0.1、本地服务器的IP地址或名称。您还可以显式地指定连接协议,即使是对于localhost,也可以使用--protocol=TCP选项。例如:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接