为啥 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 在任何/所有端口都连接的主要内容,如果未能解决你的问题,请参考以下文章
为啥 mysql CLI 可以连接,而 WordPress 却不能?