无法连接到 Amazon RDS MySQL

无法连接到 Amazon RDS MySQL

我正在尝试从 Linux 计算机连接到 RDS MySQL。当我使用 telnet 测试连接时,telnet 会话成功但是当我尝试使用下一个命令连接到数据库时

mysql -h hostname -uusername -ppassword

无法访问然后命令就卡住了。在 RDS 配置中,公共可访问性设置为是,我在安全组中添加了一条允许从所有地址访问的入站规则。

我假设当这个问题解决后,我将能够通过 jdbc 进行连接,但现在还不起作用。

感谢各位帮手!

更新:附加我运行的命令的输出: mysql 命令输出

telnet 命令输出

答案1

如果您无法连接到 MySQL 数据库实例,则导致新数据库实例连接失败的两个常见原因是:

  1. 数据库实例是使用未授权从运行 MySQL 应用程序或实用程序的设备或 Amazon EC2 实例进行连接的安全组创建的。如果数据库实例是在 VPC 中创建的,则必须具有授权连接的 VPC 安全组。如果数据库实例是在 VPC 之外创建的,则必须具有授权连接的数据库安全组。请参阅此页面VPC 和 RDS

  2. 数据库实例是使用默认端口 3306 创建的,而贵公司的防火墙规则阻止公司网络中的设备连接到该端口。要修复此故障,请使用其他端口重新创建实例。

答案2

由于套接字连接测试成功,但无法使用 mysql 客户端连接,请查看 netstat 的输出以查看连接处于什么状态(将 xxxx 替换为 RDS 实例的实际 IP 地址):

netstat -an | grep x.x.x.x

如果在使用 MySQL 客户端时看到“SYN”状态,则您可能遇到了 MTU 问题。

在撰写本文时,RDS 可能不支持用于 PMTUD 的 ICMP 数据包(https://en.wikipedia.org/wiki/Path_MTU_Discovery#Problems_with_PMTUD)。如果您尝试通过 ClassicLink 从经典 ec2 实例访问 VPC 中的 RDS 或 RedShift,则可能会出现问题。尝试使用以下方法降低 MTU,然后再次测试:

sudo ip link show
# take note of the current MTU (likely 1500 or 9001)
sudo ip link set dev eth0 mtu 1400

如果较低的 MTU 有效,请务必联系 AWS 客户支持寻求帮助,并说明您在尝试连接到 RDS 实例时遇到了 MTU 问题。如果 TCP 数据包被封装以进行隧道传输,则可能会发生这种情况,从而导致数据包数据/有效负载的可用 MTU 较低。降低 MTU 可使封装的数据包仍符合限制。

如果此方法无效,请将 MTU 重新设置为默认值并联系 AWS 支持人员进行进一步的故障排除。

相关内容