为什么MySQL在任何/所有端口都连接
-
10-10-2019 - |
题
我正在运行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
干杯
不隶属于 StackOverflow