700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 亚马逊mysql无法远程连接不上_mysql – 无法从EC2实例连接到RDS实例

亚马逊mysql无法远程连接不上_mysql – 无法从EC2实例连接到RDS实例

时间:2022-01-07 05:49:59

相关推荐

亚马逊mysql无法远程连接不上_mysql – 无法从EC2实例连接到RDS实例

可能遇到类似问题的用户连接RDS或RedShift的其他信息:

1)检查安全组

验证RDS实例的安全组允许从源服务器所属的安全组访问(或者如果外部添加到AWS,则直接添加其IP)。您应该查看的安全组是RDS控制台UI(名为“安全组”)的RDS实例属性中指定的安全组。

注意:数据库安全组可能与AWS EC2安全组不同。如果您的RDS实例是经典/公共EC2,您应该检查RDS UI的“数据库安全组”部分。对于VPC用户,安全组将是正常的VPC安全组(名称sg-xxx将列在RDS实例的属性中)。

2)确认DNS不是问题。

Amazon使用拆分DNS,因此AWS外部的DNS查找将返回公共IP,而AWS内部的查找将返回私有IP。如果您怀疑这是DNS问题,是否确认不同的可用区域返回不同的IP?如果不同的AZ获得不同的IP,您将需要联系AWS支持。

3)通过建立套接字连接确认网络连接。

像tracepath和traceroute这样的工具可能不会有帮助,因为RDS当前会丢失ICMP流量。

通过尝试建立与端口3306上的RDS实例(mysql或Postgres的5432)的套接字连接来测试端口连接。首先查找RDS实例的IP并使用telnet或nc:

telnet x.x.x.x 3306

nc -vz x.x.x.x 3306

a)如果您的连接尝试不成功并立即失败,端口可能被阻止或远程主机未在该端口上运行服务。您可能需要参与AWS支持以进一步进行故障排除。如果从AWS外部连接,请尝试从AWS内的另一个实例连接(因为您的防火墙可能会阻止这些连接)。

b)如果您的连接不成功并且您获得超时,则数据包可能被防火墙丢弃/忽略,或者数据包在不同的网络路径上返回。您可以通过运行netstat -an |来确认grep SYN(从不同的CLI窗口/会话运行并等待telnet / nc命令超时)。 SYN状态下的连接意味着您发送了连接请求,但没有收到任何回调(SYN_ACK或reject / block)。通常这意味着防火墙或安全组正在忽略或丢弃数据包。

检查以确保您不在主机和RDS实例之间使用iptables或NAT网关。如果您在VPC中,还要确保允许来自源主机的出站/出站流量。

c)如果您的套接字连接测试成功,但您无法连接到mysql客户端(CLI,工作台,应用程序等),请查看netstat的输出,以查看连接的状态(替换xxxx与实际的RDS实例的IP地址):

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

如果您在使用telnet或NC时建立了连接,但在使用mysql客户端时看到“SYN”状态,则可能会遇到MTU问题。

RDS在写入时可能不支持用于PMTUD(/wiki/Path_MTU_Discovery#Problems_with_PMTUD)的ICMP数据包。如果您尝试通过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支持以进一步排除故障。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。