我正在测试连接问题并测试了我的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
Run Code Online (Sandbox Code Playgroud)
我也尝试过-P 999它.
mai*_*290 11
就像斯宾塞写的那样,它默认使用套接字连接。
您可以像这样强制 TCP:
mysql -u root -p --port=3306 --protocol=TCP
Run Code Online (Sandbox Code Playgroud)
它忽略了端口,因为它使用的是本地套接字连接,而不是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也是如此.例如: