为什么MySQL客户端不会使用我指定的端口?

时间:2018-05-03 16:46:56

标签: mysql mariadb

我正在测试连接问题并测试了我的JDBC URL中指定的端口3307。它起作用了,所以我认为它就在那个端口上。然后我看到默认端口是3306并尝试了随机端口,仍然工作。我预计它会失败。为什么忽略命令行上的端口?

$ mysql -u root --port 999 -h localhost gb
MariaDB [gb]> SHOW VARIABLES WHERE Variable_name = 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |

$ mysql --version
mysql  Ver 15.1 Distrib 10.1.30-MariaDB, for CYGWIN (i686) using  EditLine wrapper

我也试过-P 999并且它有效。

2 个答案:

答案 0 :(得分:5)

它忽略了端口,因为它使用的是本地套接字连接,而不是TCP / IP连接。这是因为主机被指定为localhost

localhost在MySQL中有特殊含义。它没有解析为IP地址127.0.0.1(就像我们可能期望的那样,基于我们对该模式的熟悉程度。)

行为记录在MySQL参考手册中......

摘自https://dev.mysql.com/doc/refman/5.7/en/connecting.html

  

在Unix上,MySQL程序特别对待主机名localhost,其方式可能与您期望的与其他基于网络的程序相比有所不同。对于与localhost的连接,MySQL程序尝试使用Unix套接字文件连接到本地服务器。即使给出--port或-P选项指定端口号,也会发生这种情况。要确保客户端与本地服务器建立TCP / IP连接,请使用--host或-h指定主机名值127.0.0.1,或本地服务器的IP地址或名称。您还可以使用--protocol = TCP选项显式指定连接协议,即使对于localhost也是如此。例如:

答案 1 :(得分:1)

就像spencer写的那样,它默认使用套接字连接。

您可以像这样强制使用TCP:

mysql -u root -p --port=3306 --protocol=TCP
相关问题