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

时间:2010-12-09 07:33:54

标签: mysql linux ssh-tunnel mint

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

mysql --port=3306 -u root -p

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

mysql --port=1234 -u root -p

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

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

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

4 个答案:

答案 0 :(得分:11)

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

示例:

首先是SSH隧道

ssh -L 4000:localhost:3306 server.ch

然后使用

连接到远程mysql服务器
mysql -h localhost --port=4000 --protocol=TCP -u root -p

答案 1 :(得分:10)

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

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

答案 2 :(得分:1)

它会在尝试连接之前询问您的密码。如果您输入密码(或其他任何内容),并继续操作,它将回复如下内容:

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

答案 3 :(得分:1)

@titanoboa,thx为此!我遇到了同样的问题。只是为了添加你甚至可以使用以下

强制TCP连接本地主机
[client]
port = 3306 
socket = /var/run/mysqld/mysqld.sock 
protocol = TCP

干杯