答案1
如果您无法连接到 MySQL 数据库实例,则导致新数据库实例连接失败的两个常见原因是:
数据库实例是使用未授权从运行 MySQL 应用程序或实用程序的设备或 Amazon EC2 实例进行连接的安全组创建的。如果数据库实例是在 VPC 中创建的,则必须具有授权连接的 VPC 安全组。如果数据库实例是在 VPC 之外创建的,则必须具有授权连接的数据库安全组。请参阅此页面VPC 和 RDS
数据库实例是使用默认端口 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 支持人员进行进一步的故障排除。