为什么mySQL连接在任何/所有端口

Gir*_*ane 8 mysql linux ssh-tunnel linux-mint

我正在运行Linux Mint并尝试以这种方式连接到mySQL

mysql --port=3306 -u root -p
Run Code Online (Sandbox Code Playgroud)

然后它会提示我输入密码.这一切都很好.为什么当我输入这样的东西时它仍然有用......

mysql --port=1234 -u root -p
Run Code Online (Sandbox Code Playgroud)

如果没有失败,因为端口1234上没有运行mySQL服务器?

我问这个的原因是因为我想创建一个SSH隧道连接到另一台服务器上的数据库.假设SSH隧道将我的所有流量从localhost:3308转发到myremoteserver:3306.由于我的本地mySQL服务器接受我在所有端口上的连接,我实际上无法连接到端口3308并命中远程服务器.我还在打我的本地服务器....

即使我的SSH隧道选项可能出错了,我想知道是否有人知道为什么我可以连接到端口1234并且它仍然命中我在3306上运行的本地mySQL服务器?

小智 11

强制使用TCP连接--protocol=TCP.

例:

首先是SSH隧道

ssh -L 4000:localhost:3306 server.ch
Run Code Online (Sandbox Code Playgroud)

然后用.连接到远程mysql服务器

mysql -h localhost --port=4000 --protocol=TCP -u root -p
Run Code Online (Sandbox Code Playgroud)


tit*_*boa 10

如果要连接到localhost,IIRC mysql会将您连接到Unix套接字.由于在这种情况下它不通过TCP连接,因此不涉及端口,并且您提供的端口号无关紧要.

编辑:不确定在所有系统上是否都是这样,但是如果我使用127.0.0.1或主机名而不是localhost,则mysql通过TCP连接并且端口号确实很重要 - 我只能连接正确的端口号.