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

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

mysql --port=3306 -u root -p 

然后它会提示我input密码。 这一切都很好。 为什么当我input这样的东西时,它仍然有效…

 mysql --port=1234 -u root -p 

如果不是因为在端口1234上没有运行mySQL服务器而失败?

我问这是因为我想创build一个SSH隧道连接到另一台服务器上的数据库。 假设SSH隧道将所有的stream量从localhost:3308转发到myremoteserver:3306。 由于我的本地mySQL服务器正在接受所有端口上的连接,所以我实际上无法连接到端口3308并点击远程服务器。 我仍然打我的本地服务器….

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

如果您连接到本地主机,IIRC mysql会将您连接到Unix套接字。 由于在这种情况下它不通过TCP连接,所以没有涉及的端口,您给的端口号无关紧要。

编辑:不知道是否所有的系统都是如此,但如果我使用127.0.0.1或主机名而不是本地主机,mysql通过TCP连接,端口号很重要 – 我只能连接正确的端口号。

要强制使用TCP连接,请使用--protocol=TCP

例:

首先是SSH隧道

 ssh -L 4000:localhost:3306 server.ch 

然后连接到远程mysql服务器

 mysql -h localhost --port=4000 --protocol=TCP -u root -p 

尝试连接之前 ,它会询问你的密码。 如果你输入你的密码(或其他任何东西),让它继续下去,它会回应如下:

 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock' 

@titanoboa,thx为此! 我有同样的问题。 只是添加你可以实际上强制TCP连接,即使是本地主机使用以下

 [client] port = 3306 socket = /var/run/mysqld/mysqld.sock protocol = TCP 

干杯