有人知道当我可以通过 localhost 连接到我的 MySQL 服务器但不能通过 127.0.0.1 连接到时会出现什么错误吗?据我所知,这些应该以相同的方式路由,并且使用 IP 时不应创建额外的 TCP 层。
$ mysql -u root -h localhost -D test # works
$ mysql -u root -h 127.0.0.1 -D test # does not work
(127.0.0.1 does map to localhost/vice versa)
表权限明确设置为包含两种方法。
答案1
MySQL 客户端库会覆盖 localhost,使用 Unix 套接字代替 TCP/IP 连接 127.0.0.1。如果您可以连接到 localhost 但无法连接到 127.0.0.1,则表明它已设置防火墙或未监听 127.0.0.1。
答案2
手册位于连接到 MySQL 服务器建议使用以下语法:
shell> mysql --host=127.0.0.1
解释如下:
在 Unix 上,MySQL 程序会特殊处理主机名 localhost,与其他基于网络的程序相比,这种方式可能与您预期的不同。对于与 localhost 的连接,MySQL 程序会尝试使用 Unix 套接字文件连接到本地服务器。即使给出了 --port 或 -P 选项来指定端口号,也会发生这种情况。要确保客户端与本地服务器建立 TCP/IP 连接,请使用 --host 或 -h 指定主机名值 127.0.0.1,或本地服务器的 IP 地址或名称。您还可以使用 --protocol=TCP 选项明确指定连接协议,即使对于 localhost 也是如此。例如:
答案3
MySQL 客户端从提供的主机推断协议。
对于给定的连接,如果未明确指定传输协议,则隐式确定。例如,在 Unix 和类 Unix 系统上,与 localhost 的连接会导致套接字文件连接,否则会导致与 127.0.0.1 的 TCP/IP 连接。
来源:MySQL 文档
如果您无法使用127.0.0.1
as连接到服务器主持人,这可能意味着服务器没有在 TCP 端口或端口 3306 上运行(未提供时为默认端口)。在这种情况下,您只能通过套接字文件连接到它。