【问题标题】:Cannot access AWS RDS MySQL DB from CLI MySQL Linux client; works great from Navicat无法从 CLI MySQL Linux 客户端访问 AWS RDS MySQL 数据库;从 Navicat 工作得很好
【发布时间】:2015-10-02 03:59:40
【问题描述】:

好的,在 AWS 中设置一个 MySQL RDS 数据库。它不可公开访问。如果我将 Putty 放入同一子网中的 EC2 盒中,我可以在启动 Navicat 时通过隧道访问数据库。

切换到 Linux RedHat 机器(运行 Percona 5.5.44)。 我想连接到 RDS 数据库的隧道,并使其在本地端口 3308 上可用(端口 3306 已经有一个本地 MySQL 数据库,3307 [备份] 也是如此)。

telnet localhost 3308

返回

Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

所以,那里什么都没有,这是我所期望的。

运行 SSH:

ssh -L 3308:blahblah.us-east-1.rds.amazonaws.com:3306 -i key.ssh user@AWS_EC2box.com -f -N

其中 blahblah 是 RDS 服务器,AWS_EC2 是同一子网上的 EC2 服务器。

再次尝试远程登录:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
N
5.6.23-logV[>e`3|9▒7{(SL_zgu7Rumysql_native_password

我知道我想要的数据库正在运行 MySQL 5.6.23,所以很可能这是我正在寻找的数据库。

现在试试:

mysql -P 3308 -u testuser -p
Enter password:
ERROR 1045 (28000): Access denied for user 'testuser'@'localhost' (using password: YES)

无论我尝试使用哪个用户,使用密码或不使用密码,将插件设置为 mysql_old_password 并使用 Old_Password,一切都失败了。

但是我可以在我的 Windows PC 上使用 PuTTy 和 Navicat 进行设置,并且每次都可以使用相同的用户、相同的密码。 PuTTy 使用同一个 EC2 盒建立隧道,并进入同一个 RDS 盒。我已经多次拆除并重新完成双方的连接。 没有喜悦。那我做错了什么?

【问题讨论】:

  • 连接被拒绝=防火墙,或者mysql没有在那个端口上监听。拒绝访问 = 您已建立连接,但未使用正确的凭据登录。
  • 但我通过 Navicat 使用相同的凭据(用户名和密码 - 没有困难)。甚至尝试在没有密码的情况下建立连接。还是进不去。

标签: mysql linux amazon-web-services


【解决方案1】:

错误消息中的'testuser'@'localhost' 表明您在此处实际执行的操作与您打算执行的操作不同。

RDS永远不会将您识别为来自localhost

这里的问题是您使用-P (--port) 选项调用mysql 命令行客户端,而没有相应的-H (--host) 参数。如果没有--host--port 将被忽略(这似乎没有记录,但仔细想想还是有道理的——没有关联 IP 主机的 IP 端口没有任何明确定义的含义)。

您实际上是通过 unix 套接字连接到本地计算机。 (SET GLOBAL LOG_WARNINGS = 2; 在您的本地 MySQL 实例上,您将在本地 MySQL 错误日志中看到这些失败的登录。)

$ mysql -H 127.0.0.1 -P 3308 -u testuser -p

...是您正在寻找的选项的组合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 2014-08-20
    • 2020-04-08
    • 2012-08-12
    • 2020-06-04
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多