为啥 mySQL 在任何/所有端口都连接

Posted

技术标签:

【中文标题】为啥 mySQL 在任何/所有端口都连接【英文标题】:why is mySQL connecting at any/all ports为什么 mySQL 在任何/所有端口都连接 【发布时间】:2011-05-22 17:00:15 【问题描述】:

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

【问题讨论】:

当您说“工作”时,您的意思是它会提示您输入密码(它会),还是超出密码并实际将您登录到 mysql 服务器?如果您想连接到使用本地端口的 SSH 隧道,我建议您还可以在 mysql 客户端提示符处指定主机。 mysql --port=3308 -hlocalhost -u root -p。这将阻止您的 mysql 客户端使用 Unix 管道连接到您的服务器。另外,请查看 /etc/my.cnf 的 [client] 部分。 是的,它实际上将我登录到 mySQL 服务器。这是我尝试过的最新版本,它实际上将我登录到 mySQL 服务器... mysql -h localhost --port=12312312 -u root -p 【参考方案1】:

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

示例:

首先是 SSH 隧道

ssh -L 4000:localhost:3306 server.ch

然后用

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

非常感谢!当我使用 127.0.0.1 时工作。无论如何我可以强制 mysql 使用 TCP,即使我输入 localhost? @girdus:您可以创建一个option file。在[client] 部分,添加行host=127.0.0.1。这不会改变您使用localhost 时发生的情况,但它强制默认为127.0.0.1 而不是localhost。 (有关文件的结构以及应该放在哪里的文档,请参阅链接。 它也发生在 host=0.0.0.0【参考方案3】:

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

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

【讨论】:

对不起,我忘了说它在我输入密码后实际上连接了我......【参考方案4】:

@titanoboa,谢谢!我遇到了同样的问题。只是要补充一点,您实际上可以使用以下命令强制 TCP 连接,即使是 localhost 也是如此

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

干杯

【讨论】:

以上是关于为啥 mySQL 在任何/所有端口都连接的主要内容,如果未能解决你的问题,请参考以下文章

思科路由器控制端口连接图解

能ping通但是连不通任何端口

centos7 为啥开启防火墙之后就断开连接

为啥 mysql CLI 可以连接,而 WordPress 却不能?

centos7 firewall的 3306端口和mysql 远程权限也打开了,为啥navicat 还是连不上

为啥在使用XAMPP时MySQL链接不到3306端口