【问题标题】:Connect to MySQL over SSH通过 SSH 连接到 MySQL
【发布时间】:2021-08-07 20:27:53
【问题描述】:

我必须连接到远程数据库。我必须使用 SSH 连接到远程服务器才能连接到数据库。 我可以使用 MySQLWorkbench 做到这一点:访问数据库没有问题。

我可以告诉我的网站连接到远程服务器: (我使用 phpseclib 是因为 PHP libssh2 拒绝与我合作)

$ssh = new SSH2('111.222.333.444', 12345);
if (!$ssh->login("SSH-username", "SSH-password")) {
  echo 'Error';
} else {
  echo 'Tadam !';
}

这个短代码(上面)工作正常。我确实可以访问远程服务器。

如果我添加这个(使用默认 MySQL 端口 3306):

new PDO('mysql:host=111.222.333.444;port=3306;dbname=DB-name', 'DB-username', 'DB-password');

PHP 显示“致命错误”(仅此而已...)

如果我尝试(使用端口 12345,用于 SSH 连接):

new PDO('mysql:host=111.222.333.444;port=12345;dbname=DB-name', 'DB-username', 'DB-password');

PHP 显示:

致命错误:未捕获的 PDOException:数据包乱序。预计收到 0 45。数据包大小=4739923

下一个 PDOException: SQLSTATE[HY000] [2006] MySQL 服务器已消失

另一个信息: 我可以使用 $ssh->exec() 读取数据库,但我想用 PDO 来代替

$ssh->exec('mysql -uDB-username -pDB-password DB-name -e "SELECT * FROM table"');

我必须承认,所有这些 SSH 东西都不是我真正的领域......我真的不明白它是如何工作的,或者我必须做什么......

我知道在stackoverflow上已经问过一些类似的问题,我阅读了它们,但我仍然无法连接到这个远程数据库。

请帮帮我。

【问题讨论】:

  • 对于第一个错误,您正在尝试连接到端口 3306,但您的 SSH 端口是 12345。(实际上,您可以打开端口 3306 以远程访问您的 MySQL 数据库,无需使用 SSH端口 12345 ,但是你说你MUST使用SSH。无论如何端口号的差异应该是错误的原因)对于第二个错误,你可以尝试将MySQL my.cnf中的max_connections更改为看看它是否能解决你的问题。
  • @KenLee 谢谢你的回答。老实说,我不知道我是否必须使用 SSH。我所知道的是,如果我尝试在没有 SSH 的情况下使用 MySQLWorkbench 连接到数据库,它会失败(无论我使用什么端口)。另外,我无权访问服务器配置,因此无法更改 my.cnf。而且它是一个旧网站的数据库,几乎不再使用了,所以允许的连接数不太可能是我的问题的原因。

标签: php ssh phpseclib


【解决方案1】:

引用https://marc.info/?l=php-internals&m=136320712022835&w=2

这不是更多吗 感觉只是使用类似 autossh 的东西来维护你的 ssh 隧道和 让 PHP 连接到您的隧道端点? PHP 中的 mysqli_connect() 是 只是底层库之上的一个薄包装器。

我的猜测是 PDO 的工作方式可能类似。

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 2014-11-24
    • 2014-02-18
    • 2016-08-13
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多