gpt4 book ai didi

通过 SSH 隧道的 MySQL 连接

转载 作者:IT老高 更新时间:2023-10-28 23:46:39 26 4
gpt4 key购买 nike

我已经在两台服务器 AB 之间建立了 SSH 隧道。 B 有 MySQL 服务器,这有效:

mysql -h localhost -P 3306 -u user -p

虽然这不是:

mysql -h 127.0.0.1 -P 3306 -u user -p

虽然my.cnf有这些行:

bind-address        = 127.0.0.1
# Next addr differs slightly, but anyway
bind-address = 99.99.99.99

现在关于隧道。它连接以下内容:(A) localhost(9989) -> (B) localhost(3306)但是当(在 A 上,转发端口)我做

mysql -v -h 127.0.0.1 -P 9989 -u user userdb -p

我收到 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet',系统错误:0

当我这样做的时候

mysql -v -h localhost -P 9989 -u user userdb -p

我得到 ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES)

可能是什么原因?我做错了什么?

最佳答案

这里有三个问题。

1 - 暂时忘掉 SSH 隧道

您不能将 MySQL 绑定(bind)到一个以上的特定 IP。第一个 bind-address 子句被第二个子句覆盖(因此被忽略)。您的服务器仅监听 99.99.99.99

-h localhost 可以连接而-h 127.0.0.1 不能连接的原因是,在第一种形式中,您实际上并没有通过 TCP/IP,但通过本地套接字。

在您的 my.cnf 中查找 socket 子句。

删除一个冗余的 bind-address 子句。您可能想要使用 bind-address=0.0.0.0,它指示 MySQL 守护程序监听所有 网络接口(interface)。

2 - 让我们设置您的 SSH 隧道

错误的原因 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0 对我来说并不明显。我怀疑 SSH 隧道实际上仅在收到连接请求时才建立(在您的情况下,当您运行mysql 客户端时)。由于您的服务器不监听 127.0.0.1(见上一段),SSH 隧道无法建立,连接失败,您的客户端将其解释为网络故障。

3 - 为什么 mysql -v -h localhost -P 9989 -u user userdb -p 失败

请发布

的输出

[编辑:刚刚在下面添加了 ...OR host LIKE 'localhost',因为这可能与故障排除相关]

mysql > SELECT user, host FROM mysql.user WHERE user LIKE 'user' OR host LIKE 'localhost';

(在 LIKE 子句之后替换 'user',必要时用实际用户名替换)

MySQL 访问控制检查用户名/密码 (user) 和连接源 (host) 以识别用户。您可能没有创建用户 'user'@'localhost'

注意:此时无法从我的位置访问 mysql.com,我无法链接到相关的手册页。

关于通过 SSH 隧道的 MySQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11061621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com