小编典典

通过SSH隧道的MySQL连接

mysql

我已经在两个服务器 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', system error: 0

当我这样做

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

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

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


阅读 726

收藏
2020-05-17

共1个答案

小编典典

这里有三个问题。

1-暂时忘记SSH隧道

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

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

在您my.cnfsocket条款中查找。

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

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';

'user'LIKE子句后,如有必要,请用实际用户名替换)

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

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

2020-05-17