通过PhpStorm使用SSH隧道MySQL连接和socket连接

3

默认情况下,PhpStorm的数据库管理器运行良好。但是在目前特殊的提供商(1u1.de)上,我遇到了一些问题。

我可以通过SSH连接到提供商。如果我想连接到MySQL数据库,我必须使用:

mysql --host=localhost --user=dbo123123123 -S /tmp/mysql5.sock --password='123123123';

这个命令在服务器的CLI上运行良好,但我没有找到一种方法来通过PhpStorm连接到这个数据库。

对我来说,似乎“套接字连接”可能是问题所在。有人知道如何使其工作吗?


部分解决方案(?!):

也许是一个解决方案的第一步,我发现您可以将套接字转发到本地计算机作为自己的套接字:

ssh -nNT -L $(pwd)/yourLocal.sock:/var/run/mysqlREMOTEMYSQL.sock user@somehost

信息来源

这向我展示了Socket已经建立:

netstat -ln | grep mysql unix 2 [ ACC ] STREAM LISTENING 3713865 /myFolder/mysql5.sock

但我仍然无法使用以下命令连接到此套接字:

mysql -h localhost --protocol=SOCKET -u'username' -p'mypassword' -S /myFolder/mysql5.sock

出现了这个错误:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 95 "Operation not supported"

可能是Mysql Connection with Phpstorm IDE的重复问题。 - tanaydin
2个回答

5

ssh -L /tmp/mysql.sock:/var/run/mysqld/mysqld.sock sshuser@remotehost

然后

mysql -h localhost --protocol=SOCKET -u'用户名' -p'密码' -S /tmp/mysql.sock

对我来说似乎可以正常工作。


谢谢。工作正常。只有在平板电脑上使用Termux时,我无法连接。错误“ERROR 2002(HY000):无法通过套接字连接到本地服务器...” - kdg1955
同时也适用于Termux。再次感谢。 - kdg1955

0
使用SSH设置端口转发,这将允许您安全地连接到数据库,而不会将其暴露给外界。
在SSH上,使用-L参数建立隧道。
ssh -L <local_port>:<remote_host>:<remote_port> user@host

这将在您的本地机器上打开<local_port>,然后重定向所有发往<remote_host>:<remote_port>的数据包到隧道的另一侧。

在您的情况下,您可能想尝试类似于以下内容:

ssh -L 3306:127.0.0.1:3306 user@mybox.1u1.de

建立隧道后,您将能够通过本地端口连接到数据库。

从您的本地计算机而非1u1主机进行操作。

mysql -u <user> -p --host 127.0.0.1 --port 3306

如果一切正常,您应该能够配置PhpStorm使用相同的地址:127.0.0.1:3306 SSH隧道需要保持打开状态,直到您需要连接到数据库为止。

谢谢您的回答,但对我没有用。这篇文章(https://medium.com/@dperny/forwarding-the-docker-socket-over-ssh-e6567cfab160)看起来很有希望:`ssh -nNT -L $(pwd)/mylocal.sock:/var/run/mysqlREMOTE.sock user@someHost`通过这种方式,我能够在当前目录中创建一个套接字。但我仍然无法连接它。出现了“ERROR 2013 (HY000):Lost connection to MySQL server at 'reading initial communication packet',system error: 95 "Operation not supported"”。 - suther
那不是我告诉你要使用的命令。尝试转发TCP套接字而不是Unix套接字。 - Matt Clark
就像我说的,你的命令没有起作用。 我通过ssh连接到web服务器,但如果我在web服务器上,我无法连接到端口3306,只能连接到/tmp/mysql5.sock。我想这就是为什么你的建议对我不起作用的原因!我已经尝试过了,没有得到工作结果。 无论如何,谢谢你的提示。 我发的这个是另一个我找到的。 - suther
如果它“没用”,请发布您认为的原因。我正在积极使用SSH隧道连接到我的数据库,该命令有效。 - Matt Clark
我熟悉使用ssh-tunnel连接mysql。请查看我3分钟前编辑的帖子。似乎是由于套接字行为引起的。 - suther

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接