【问题标题】:SSH Tunnel MySQL Connection with socket-connection via PhpStorm通过 PhpStorm 使用套接字连接的 SSH 隧道 MySQL 连接
【发布时间】:2018-05-05 06:22:59
【问题描述】:

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

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

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

通过服务器上的 CLI 效果很好,但我没有找到通过 PhpStorm 连接到此数据库的方法。

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


部分解决方案(?!):

也许是解决方案的第一部分,我发现您可以通过这种方式将 Socket 作为自己的套接字转发到本地 PC:

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

Source of Information

这告诉我,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"

【问题讨论】:

标签: mysql sockets phpstorm jetbrains-ide ssh-tunnel


【解决方案1】:

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

对我来说似乎很好用

【讨论】:

    【解决方案2】:

    使用 SSH 设置端口转发,这将允许您安全地连接到您的数据库,而不会将其暴露给外界。

    在 ssh 上,使用 -L 参数建立隧道。

    ssh -L <local_port>:<remote_host>:<remote_port> user@host
    

    这将在您的本地计算机上打开&lt;local_port&gt;,然后将所有数据包重定向到隧道的另一端,为&lt;remote_host&gt;:&lt;remote_port&gt; 指定

    在你的情况下,你可能想尝试这样的事情:

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

    【讨论】:

    • 感谢您的回答,但对我不起作用。这(medium.com/@dperny/…)对我来说看起来很有希望:ssh -nNT -L $(pwd)/mylocal.sock:/var/run/mysqlREMOTE.sock user@someHost 这样我就能够在我当前的目录中创建一个 Socket。但我仍然无法连接到它。收到ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 95 "Operation not supported"
    • 这不是我告诉你要使用的命令。尝试转发 TCP 套接字而不是 Unix 套接字。
    • 就像我说的,你的命令不起作用。我通过 ssh 连接到网络服务器,但如果我在网络服务器上,我无法连接到端口 3306,而只能连接到 /tmp/mysql5.sock。想想就是,为什么你的建议对我不起作用?!我试过了,没有工作结果。无论如何,谢谢你的提示。我发布的这个是我找到的另一个。
    • 它'没有工作'发布你认为的原因。我正在积极使用 SSH 隧道连接到我的数据库,该命令有效。
    • 我熟悉 ssh-tunnel 到 mysql。请参阅我编辑的帖子 3 分钟。前。似乎是套接字行为的原因。
    猜你喜欢
    • 2018-10-06
    • 2012-06-19
    • 2014-03-21
    • 1970-01-01
    • 2021-02-15
    • 2016-02-04
    • 2014-09-17
    相关资源
    最近更新 更多