我正在运行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服务器?
答案 0 :(得分:11)
要强制TCP连接,请使用--protocol=TCP
。
示例:强>
首先是SSH隧道
ssh -L 4000:localhost:3306 server.ch
然后使用
连接到远程mysql服务器mysql -h localhost --port=4000 --protocol=TCP -u root -p
答案 1 :(得分:10)
如果要连接到localhost,IIRC mysql会将您连接到Unix套接字。由于在这种情况下它不通过TCP连接,因此不涉及端口,并且您提供的端口号无关紧要。
编辑:不确定在所有系统上是否都是这样,但如果我使用127.0.0.1或主机名而不是localhost,则mysql通过TCP连接并且端口号确实很重要 - 我只能连接正确的端口号。
答案 2 :(得分:1)
它会在尝试连接之前询问您的密码。如果您输入密码(或其他任何内容),并继续操作,它将回复如下内容:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock'
答案 3 :(得分:1)
@titanoboa,thx为此!我遇到了同样的问题。只是为了添加你甚至可以使用以下
强制TCP连接本地主机[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
protocol = TCP
干杯