8

我正在运行 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

4 回答 4

11

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

例子:

首先是 SSH 隧道

ssh -L 4000:localhost:3306 server.ch

然后连接到远程mysql服务器

mysql -h localhost --port=4000 --protocol=TCP -u root -p
于 2012-09-27T16:23:05.460 回答
10

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

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

于 2010-12-09T08:59:27.370 回答
1

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

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock'
于 2010-12-09T07:51:53.870 回答
1

@titanoboa,谢谢!我遇到了同样的问题。只需添加,您实际上可以使用以下命令强制 TCP 连接,即使是 localhost

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

干杯

于 2014-06-23T05:18:37.540 回答