我测试了一个连接问题,测试了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条答案
按热度按时间khbbv19g1#
就像斯宾塞写的,它默认使用套接字连接。
您可以这样强制tcp:
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也是如此。例如: