繁体   English   中英

通过 PhpStorm 使用套接字连接的 SSH 隧道 MySQL 连接

[英]SSH Tunnel MySQL Connection with socket-connection via PhpStorm

默认情况下,来自 PhpStorm 的数据库管理器运行良好。 但目前在一个特殊的 Provider (1u1.de) 上,我在完成这项工作时遇到了一些麻烦。

我可以通过 SSH 连接到 Provider。 如果我想连接到 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

但我仍然无法连接到这个 Socket:

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"

使用 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 隧道都需要保持打开状态。

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

接着

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

似乎对我来说很好用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM