场景描述
数据库通过公网或内网连接,连接失败。
原因分析
主要从以下几个方面考虑:
排除数据库实例异常
例如:关系数据库MySQL版系统故障,实例状态异常,或已退订。
(常见)使用正确的客户端连接方式
内网连接需要实例与ECS云主机必须在同一区域、VPC内。
公网连接需要购买或使用已有弹性IP,并对RDS实例绑定该弹性IP 。
使用正确的SSL方式安全连接
界面SSL开关开启和关闭,分别对应不用的连接命令。例如:
开关开启:mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem
开关关闭:mysql -h 172.16.0.31 -P 3306 -u root -p
排除连接命令错误
例如:连接地址错误、端口参数配置错误、用户名和密码错误、SSL方式下命令错误。
(常见)排除网络不通
内网访问
确认ECS云主机与关系数据库MySQL版实例是否在同一个区域,同一VPC内。
检查安全组规则。
安全组外访问安全组内的关系数据库MySQL版实例时,需要为安全组添加相应的入方向规则。
在ECS上测试是否可以正常连接到RDS实例地址的端口。
公网访问
检查安全组规则。
安全组外访问安全组内的RDS实例时,需要为安全组添加相应的入方向规则。
检查网络ACL规则。
相同区域主机进行ping测试。
白名单添加
未将客户端IP加入到白名单,导致无法连接数据库。
注意
需注意:该原因为常见的数据库连接失败原因,请优先排查。
(常见)排除实例的连接数满的情况
实例连接数过多,可能会导致业务侧无法正常连接。
(常见)排除实例的磁盘满的情况
当实例处于“磁盘空间满”状态时,影响数据的正常读写操作。
连接失败的常见报错
包含连接失败的常见报错,以及相应的解决方法。
解决方案
内网无法连接数据库
检查ECS云主机和MySQL实例是否在同一区域和VPC内。
对等连接和虚拟专用网络VPN:不同区域的VPC可以互连,跨区域连接实现全球云上网络。具体操作,可参见VPC连接。
检查安全组规则,ECS与MySQL实例在不同安全组时,需要为MySQL和ECS分别设置安全组规则。可参见设置安全组规则。
检查IP白名单,无论内外网访问,都需要加白名单才可访问,可参见设置IP白名单。
连接时所使用的数据库密码是否正确,可通过数据库管理控制台界面进行重置密码。
外网无法连接数据库
MySQL实例绑定公网IP后无法ping通
检查安全组规则。在 网络控制台的安全组 页面中,找到属于目标数据库实例的安全组,检查入方向规则。
检查“ 网络ACL”规则。
相同区域主机进行ping测试。在相同区域的弹性云主机去尝试ping,如果可以正常ping通弹性公网IP说明虚拟网络正常,如果仍然没有ping通请联系技术支持。
MySQL实例连接数满
请及时排查业务侧连接是否有效,优化实例连接,释放不必要的连接。
规格偏小,请对数据库进行规格扩容。
修改最大连接数。
数据库实例默认最大数据连接数为3000,您可以通过下述命令查看当前实例设置的最大连接数:
show global variables like 'max_connections';
如果您需要对最大数据连接数进行调整,您可以通过调整数据库实例参数max_connections进行调整,修改方式参见修改参数组。
如果ECS和数据库部署在了不同的VPC,无法连接怎么办
您可以采用如下任一方式处理该问题:
可以将ECS的虚拟私有云切换为与数据库相同的虚拟私有云。具体操作,请参考虚拟私有云-虚拟私有云VPC管理-修改虚拟私有云。
为两个不同的虚拟私有云建立对等连接,实现内网互通。具体操作,请参考创建对等连接-申请对等连接(同账号)。
MySQL实例状态是否异常
排查数据库实例是否异常,可以在管理控制台上查看实例的状态。如果实例因欠费或者到期而处于不可用的状态,或者因实例本身因某些原因导致异常,也会导致客户端无法连接到实例。