我正在运行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服务器?

有帮助吗?

解决方案

如果您要连接到Localhost,则IIRC MySQL将您连接到UNIX插座。由于在这种情况下,它不会通过TCP连接您,因此不涉及端口,您给出的端口号无关紧要。

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

其他提示

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

例子:

首先是SSH隧道

ssh -L 4000:localhost:3306 server.ch

然后使用

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,为此!我遇到了同样的问题。只是为了添加您实际上也可以强制使用以下内容来强制TCP连接

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

干杯

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top