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

zy1mlcev  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(466)

我测试了一个连接问题,测试了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 而且成功了。

khbbv19g

khbbv19g1#

就像斯宾塞写的,它默认使用套接字连接。
您可以这样强制tcp:

mysql -u root -p --port=3306 --protocol=TCP
d7v8vwbk

d7v8vwbk2#

它忽略了端口,因为它使用的是本地套接字连接,而不是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也是如此。例如:

相关问题