在刚开始使用云数据库RDS时,经常有客户无法连接RDS实例,主要是由于网络类型不统一、白名单未放行对应IP、连接地址错误等导致的。以下为最常见的原因和解决办法。
注:云数据库RDS无法连接分为应用服务器ECS无法连接RDS和本地远程工具(例如Navicat)无法连接。如果是本地无法远程连接,主要是没有将本地公网IP添加到RDS的白名单或者是连接的是RDS的内网地址。
网络类型不同
- ECS实例采用专有网络(VPC),RDS实例采用经典网络
- 解决办法:将RDS实例从经典网络切换为VPC。
- ECS实例采用经典网络,RDS实例采用专有网络(VPC)
- 解决办法:将ECS实例从经典网络迁移到VPC。
注: 切换后,两者必须处于同一个VPC,才能内网互通。有的用户可能觉得可以通过RDS的公网地址连接,但这样性能差、不安全、不稳定,不建议通过公网地址连接。
专有网络(VPC)不同
专有网络VPC是基于阿里云构建的一个隔离的网络环境,专有网络之间逻辑上彻底隔离,所以当ECS和RDS实例的网络类型都是专有网络时,还需要保证所属的专有网络也相同,才能内网互通。
- 解决办法一(推荐):将RDS实例迁移到ECS实例所在的VPC。
- 解决办法二:在两个VPC之间建立云企业网。
地域不同
ECS实例和RDS实例位于不同的地域时,无法直接通过内网互通。
- 解决办法:ECS实例和RDS实例的网络类型都设置为VPC,同时在两个VPC之间建立云企业网。
IP白名单设置有误
- 由于设置白名单。 中只有默认地址127.0.0.1。该地址表示不允许任何设备访问RDS实例。因此需在白名单中添加对端的IP地址,具体操作请参见
- 白名单设置成了0.0.0.0,正确格式为0.0.0.0/0。
说明: 0.0.0.0/0表示允许任何设备访问RDS实例,请谨慎使用。
- 如果开启了高安全白名单,需进行如下检查:
- 如果使用的是专有网络的内网连接地址,请确保ECS内网IP地址添加到了专有网络的分组。
- 如果使用的是经典网络的内网连接地址,请确保ECS内网IP地址添加到了经典网络的分组。
- 如果通过公网连接,请确保设备公网IP地址添加到了经典网络的分组(专有网络的分组不适用于公网)。
- 您在白名单中添加的设备公网IP地址可能并非设备真正的出口IP地址。原因如下:
- 公网IP地址不固定,可能会变动。
域名解析失败或错误
域名服务器出现故障或修改过网卡配置,可能会导致域名解析失败或错误。此时可以通过ping
和 telnet
测试到RDS的连通性,命令如下。
ping <域名>
telnet <域名> <端口号>
示例
如果失败的话,可以通过修改网卡配置文件来解决问题,具体步骤如下:
- 修改对应的网卡配置文件。
vi /etc/sysconfig/network-scripts/<网卡配置文件名>
说明 <网卡配置文件名>:ECS服务器使用的网卡,可以通过ifconfig
查看后缀名,默认为ifcfg-eth0。 - 在配置文件末尾加入如下配置。
DNS1=100.100.2.136 DNS2=100.100.2.138
说明 如果已经有DNS1和DNS2配置,请将IP地址修改为如上所示。 - 使用如下命令重启Network服务。
systemctl restart network
- 使用如下命令查看是否修改成功。
cat /etc/resolv.conf
只读实例未设置白名单
使用只读实例或读写分离时,要确保只读实例上也设置了白名单,否则应用程序无法访问只读实例。
内外网地址使用错误
使用内网地址从外网进行连接,或者使用外网地址从内网进行连接都会导致连接失败。
请确认您使用的地址类型。如果您需要从内网连接RDS实例,请使用RDS实例的内网地址;如果您需要从外网连接RDS实例,请使用RDS实例的外网地址。