前提条件
请确保自己的连接方式是正确的,以及尝试连接的用户名和密码正确。如果您不知道怎么样连接,请参考[如何连接到 RDS 数据库实例](https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/CHAP_CommonTasks.Connect.html?trk=cndc-detail)。以 MySQL 举例,通过 MySQL 客户端用命令行进行连接的方法如下,其他 RDS 连接方法,请参考[此篇文章](https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html?trk=cndc-detail)。 如您使用的是 Amazon Aurora ,请参考[如何连接到 Aurora 实例](https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.html?trk=cndc-detail)。
mysql -h <去掉尖括号替换为自己的 endpoint> -P 3306 -u <去掉尖括号替换为自己的 master 用户名> -p故障排除
0.测试与 Amazon RDS 数据库实例的连接
Linux 和 mac 系统下,使用如下命令测试与数据库实例的连接
nc -zv \<DB-instance-endpoint>\<port>windows系统下, 使用
telnet \<DB-instance-endpoint>\<port>如果命令返回 Connection to \<endpoint> succeeded ,则数据库本身网络和端口是通的。请直接跳到 **4.其他可能原因** 排查。如否,则请依次检查 1. 安全组,2. 可见性 3. 子网组 三个小节。
1. 检查安全组
安全组中的 source 为允许访问的 ip 源, port 为允许访问的端口。 **请检查该数据库实例是否有开放相应的端口,并且允许您的 ip 段访问(source)**。不同 RDS 引擎所需要的默认端口是不同的,如 MySQL / Aurora / MariaDB 的默认端口为 3306,SQL Server 默认端口为1433,Oracle 为 1521,PostgreSQL 默认端口 5432。
为了安全考虑,请尽量将您的 source 定义为只允许特定的 ip 地址段访问(如下图所示,单个ip需要在最后加/32的后缀), 请检查当前机器的 ip 是否符合此 ip 段。
另外,如果在办公局域网中, 您的 ip 地址可能无法固定,每次上网会发生变化,在这种情况下,此时建议设置 source 为您的办公网络的 ip range。

如图所示,仅对 172.31.0.0/16 开放了供 MySQL 连接的 3306 端口,如果您目前尝试连接的 ip 不在此网段中,将会连接失败。

<!--StartFragment-->
2. 检查数据库公开性
为了安全考虑,我们强烈建议您的 RDS 设置为**不对外界可见**的 。但应当注意的是,**此时外网是无法与这台数据库建立连接的**,只有 VPC 内的实例可以与之建立连接。也就是说,此时直接用您本地的客户端是无法连接到该台 RDS 的。

解决方法为:先 ssh 到同 VPC 下的 EC2 ,在同 VPC 内的 EC2 上发起与这台 RDS 的连接(原理如下图所示)。此时,一定要注意,需要二次检查 RDS 的安全组,是否允许了该台 EC2 IP 的访问; EC2 本身是否允许本地 IP 建立 ssh 连接 (22端口),以及 EC2 是否在公有子网里。

3.检查子网组
如果您的公开性(public accessibility)选择了 “是”,但仍然无法连接,请检查子网组。如果子网组含有私有子网的话,也可能会导致数据库无法连接。
私有子网是指路由表中没有与 IGW 相关联路由的子网,外界不能与私有子网建立连接。反之,公有子网是指有指向 IGW 路由的子网,外界可以访问。
此时解决方法为:
- 修改私有子网的路由表,添加 IGW (Internet 网关)的路由,使之成为公有子网 ;
- 或者重新启动 RDS 到全部含有public subnet 的子网组 ( subnet group )中。
4.其他可能原因
- 请检查您的数据库实例是否处于 available 可用状态。
- 请检查您的网络提供商是否屏蔽了 3306 等特殊端口,并尝试更换密码。公司 VPN 或者公共网络等有可能会屏蔽这些特殊端口。
- 如果您未使用 master 登录,而是使用新建的 RDS 用户,需要配置允许该用户名登录的 IP,并使用对应的 IP 登录。
参考链接
[<https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.Connecting>](https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.Connecting?trk=cndc-detail)