更新时间:2024-04-13 GMT+08:00

RDS实例连接失败怎么办

问题分析

主要从八个方面考虑:

  1. 排除数据库实例异常

    例如:关系型数据库系统故障,实例状态异常,实例或表被锁定。

  2. (常见)使用正确的客户端连接方式
    • 内网连接需要RDS与ECS实例必须在同一区域、VPC内。
    • 公网连接需要购买或使用已有EIP,并对RDS实例绑定该EIP 。
  3. 使用正确的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
  4. 排除连接命令错误

    例如:连接地址错误、端口参数配置错误、用户名和密码错误、SSL方式下命令错误。

  5. (常见)排除网络不通

    内网访问

    1. 确认ECS与RDS是否在同一个区域,VPC。
    2. 检查安全组规则。

      安全组外访问安全组内的RDS实例时,需要为安全组添加相应的入方向规则

    3. 在ECS上测试是否可以正常连接到RDS实例地址的端口。

    公网访问

    1. 检查安全组规则。

      安全组外访问安全组内的RDS实例时,需要为安全组添加相应的入方向规则

    2. 检查网络ACL规则。
    3. 相同区域主机进行ping测试。
  6. (常见)排除实例的连接数满的情况

    实例连接数过多,可能会导致业务侧无法正常连接。

  7. (常见)排除实例的磁盘满的情况

    当实例处于“磁盘空间满”状态时,影响数据的正常读写操作。

排查思路

  1. 排除数据库实例异常

    检查办法:请在控制台检查云实例状态是否为“正常”。

    能原因:关系型数据库系统故障,实例状态异常,实例或表被锁定等。

    解决方案:如果实例状态为“异常”,请尝试重启。

  2. 使用正确的客户端连接方式

    建议安装不低于数据库实例版本的引擎客户端

    内网和公网连接实例的具体操作步骤,请参见外部服务器能否访问RDS数据库

    表1 客户端连接方式

    连接方式

    使用场景

    连接样例

    内网方式

    系统默认提供内网IP地址。

    当应用部署在ECS上,且该ECS与RDS实例处于同一区域,同一VPC时,建议单独使用内网IP连接ECS与RDS实例。

    以RDS for MySQL为例:

    mysql -h <内网地址> -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    公网方式

    不能通过内网IP地址访问RDS实例时,使用公网访问,建议单独绑定弹性公网IP连接ECS(或公网主机)与RDS实例。

    以RDS for MySQL为例:

    mysql -h <弹性公网IP> -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

  3. 使用正确的SSL方式安全连接
    • (推荐)SSL方式:实例连接管理页面的SSL开关开启,并且上传证书到ECS。

      mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    • 普通方式:实例基本信息页面的SSL开关关闭。

      mysql -h 172.16.0.31 -P 3306 -u root -p

  4. 排除连接命令错误

    请获取正确的连接地址、端口参数配置、用户名和密码、SSL方式下命令错误,并重试连接实例。

    SSL内网连接RDS for MySQL示例:mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    • 连接地址

      目标实例的“连接管理”页面,“内网连接”页签的“内网地址”

    • 数据库端口

      目标实例的“连接管理”页面,“内网连接”页签的“数据库端口”

    • 用户名和密码

      root管理员账号及其对应的密码。

    • 证书名称

      SSL证书文件名,该文件需放在执行该命令的路径下。

    SSL公网连接RDS for MySQL示例:mysql -h 公网地址 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    • 连接地址

      目标实例的“连接管理”页面,“公网连接”页签的“弹性公网IP”

    • 数据库端口

      目标实例的“连接管理”页面,“公网连接”页签的“数据库端口”

    • 用户名和密码

      root管理员账号及其对应的密码。

    • 证书名称

      SSL证书文件名,该文件需放在执行该命令的路径下。

  5. 排除网络不通
    内网访问
    1. 检查ECS与RDS是否在同一个区域,VPC。
    2. 检查安全组规则。
    3. 在ECS上测试是否可以正常连接到RDS实例地址的端口。

      telnet <连接地址> <端口号>

    公网访问

    1. 检查安全组规则。
    2. 相同区域主机进行ping测试。

      如果在原ECS上没有ping通RDS实例绑定的EIP,请在相同区域的另一台ECS上去ping该EIP。

  6. 排除实例的连接数满的情况

    检查办法

    1. 通过show variables like '%max%connections%';命令查看实例连接数,示例:

    2. 查看实例的连接数指标是否已达上限,可查看目标实例的“数据库总连接数”“当前活跃连接数”,判断是否需要释放连接。

    可能原因:数据库连接数过多,可能会导致业务侧无法正常连接,也会导致实例全量备份和增量备份失败,影响业务的正常使用。

    解决方案
    1. 请及时排查业务侧连接是否有效,优化实例连接,释放不必要的连接。
    2. 如果设定值为default,可以对数据库进行规格扩容,用以提高max_connections的值,具体请参见变更实例的CPU和内存规格
    3. 目前可以查看数据库CPU、内存、磁盘、连接数等指标,并且设置告警策略,出现告警时可以提前识别风险。支持的指标请参见支持的指标
  7. 排除实例的磁盘满的情况
    检查办法:磁盘空间使用率可通过管理控制台或云监控服务查看。
    • 通过管理控制台查看

      选择目标实例,单击实例名称,进入“基本信息”页面。在“存储空间”模块,查看磁盘使用率。

    • 通过云监控服务查看

      选择目标实例,单击“查看指标”,跳转到云监控页面,查看目标实例的磁盘使用率指标。