繁体   English   中英

通过 SSH 连接到 MySQL

[英]Connect to MySQL over SSH

我必须连接到远程数据库。 我必须使用 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

Next PDOException: SQLSTATE[HY000] [2006] MySQL server has gone away

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

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

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

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

请帮我。

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

使用类似 autossh 的东西来维护您的 ssh 隧道并让 PHP 连接到您的隧道端点不是更有意义吗? PHP 中的 mysqli_connect() 只是底层库顶部的一个薄包装器。

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

暂无
暂无

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

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