【问题标题】:MySQL unknown server host (thru ssh tunnel & CLI, but not workbench)MySQL 未知服务器主机(通过 ssh 隧道和 CLI,但不是工作台)
【发布时间】:2012-02-15 09:05:09
【问题描述】:

当我尝试通过 SSH 隧道访问 mysql 时,出现错误:

ERROR 2005 (HY000): Unknown MySQL server host '[serverhost]' (0)

当我通过 MySQL Workbench 或普通的 SSH CLI 进行尝试时,它可以正常工作。我究竟做错了什么? (我已经扫描了该站点上的多个相关主题,但没有一个可以向我解释这种行为。)

TMI:

我拥有的主机是一个名称,而不是一个 IP。

我这样打开隧道:

plink.exe [user]@[remote-ip] -P [ssh-port] -pw [pw] -L [local-listen-port]:localhost:[remote-mysql-port]

因此,我在命令行(通过隧道)上调用 mysql:

mysql -h [serverhost] -u [user] -p[pw] --port [local-listen-port]

因此,我通过 SSH 命令行(无隧道)调用 mysql:

mysql -h [serverhost] -u [user] -p[pw] --port [remote-mysql-port]

【问题讨论】:

  • 去掉方括号。
  • @Pekka,括号仅用于表示编辑注释,用它的表示替换我的实际代码。我并没有真正键入它们,而是使用“local-listen-port”作为端口号。

标签: mysql ssh ssh-tunnel


【解决方案1】:

您现有的 plink 命令是错误的,因为它指定 localhost 作为目标地址(这是 SSH 会话另一端的 localhost,所以 [remote-ip],根据您的估计,这就是为什么您得到一个错误) - 它应该是 [serverhost]。

然后,您错误地尝试将mysql直接连接到[serverhost],但是隧道不影响路由,所以这是不正确的,您应该连接到localhost。

您现有的示例命令在连接到 [remote-ip] 上的 ssh shell 会话时有效,因为您正在连接 来自 [remote-ip],它大概可以访问 [serverhost]。

假设 [serverhost] 是远程服务器,您的命令应该是:

plink.exe [user]@[remote-ip] -P [ssh-port] -pw [pw] -L [local-listen-port]:[serverhost]:[remote-mysql-port]

然后

mysql -h localhost -u [user] -p[pw] --port [local-listen-port]

编辑:让我尝试为您绘制图表,因为您显然误解了隧道的性质:

SSH 连接

localhost[?] 远程IP[22]

隧道

localhost[本地端口] 远程 IP[22] 服务器主机[远程端口]

因此,SSH/plink 在 localhost 上绑定了一个端口,使用您指定的 [local-port] 号,当接收到连接请求时,建立从 [remote-ip] 到 [serverhost:remote- port],然后在它们之间来回打乱发送/接收,使用它自己的 SSH 连接进行从 [localhost] 到 [remote-ip] 的跃点。

所以 - 一旦建立隧道,要访问 [serverhost:remote-port],您实际上将工具指向 [localhost:local-port],隧道会将流量路由到适当的位置。

【讨论】:

  • 我可能不明白你的回答,但你有没有注意到,即使我只是 ssh-ing 或使用工作台,也需要提供主机?我不是试图使用“主机”来指代隧道另一端的计算机,而是指与该计算机不同的 mysql 服务器。
  • 删除主机的提及或将其交换为“本地主机”给我ERROR 2013 (HY000): Lost connection to MySQL server at 'waiting for initial communication packet', system error: 0。我再次强调,我通过 Workbench 提供了相同的信息,并且以某种方式成功访问了服务器。
  • 是的,我指出 [serverhost] 是服务器所在主机的完整域名,即您要创建 ssh 隧道的主机 - 但 ssh 隧道会创建一个本地端口,在您的 localhost 机器上,当您连接时链接到该端口 - 所以要连接,您使用: mysql -h localhost -u [user] -p[pw] --port [local-listen-port]
  • 但即使我通过 ssh 连接到由“remote-ip”(放置隧道)指定的远程机器,主机也不是 localhost。因此,当我通过通往该计算机的隧道运行时,它不能是 localhost。就我而言,mysql 服务器不是我的 SSH 隧道目标的本地服务器。
  • 这就是为什么我在上面提供了“通过 SSH 命令行调用 mysql”。即使在那里,我也必须指定一个外国主机名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 2018-11-30
  • 2011-11-27
  • 2015-09-20
  • 2011-08-12
  • 2014-12-13
  • 2011-11-25
相关资源
最近更新 更多