通过SSH隧道的MySQL连接
我已经在两个服务器 和 之间建立了SSH隧道。 有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)
但是当(在
,端口转发)时,我会
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)
可能是什么原因?我究竟做错了什么?
回答:
这里有三个问题。
1-暂时忘记SSH隧道
您不能将MySQL绑定到多个特定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守护程序监听 所有 网络接口。
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,我无法链接到相关的手册页。
以上是 通过SSH隧道的MySQL连接 的全部内容, 来源链接: utcz.com/qa/423378.html