全部产品

连接RDS MySQL或MariaDB TX实例时出现“Can’t connect to MySQL server on ‘XXX’报错”

更新时间:2021-01-12 16:26:48

问题描述

连接RDS MySQL或MariaDB TX实例时,提示以下其中一种错误信息:

  • ERROR 2003 (HY000): Can’t connect to MySQL server on ‘XXX’(10038或10060或110)
  • 无法连接到数据库:XXX

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

本文主要介绍以下2种方法:

ECS通过内网无法访问RDS的解决办法

  1. 请确保ECS实例和RDS实例处于同一个地域。当ECS实例和RDS实例位于不同的地域时,无法直接通过内网互通,请参见以下方法进行处理:
    • 解决办法一:将原实例申请退款,重新购买同一地域的实例。
    • 解决办法二:ECS实例和RDS实例的网络类型都设置为VPC,如何切换网络类型请参见切换网络类型。同时在两个VPC之间建立高速通道。
    • 解决办法三:通过外网互通。这种方式的性能、安全性、稳定性较差,建议在架构上合理搭配。
  2. 请确保ECS实例和RDS实例的网络类型相同。如果一个是经典网络,一个是专有网络,请参见以下方法进行处理:
    • ECS实例采用专有网络(VPC)而RDS实例采用经典网络的场景
      • 解决办法一(推荐):将RDS实例从经典网络切换为VPC,具体操作请参见切换网络类型
        说明:切换后,两者必须处于同一个VPC,才能内网互通。
      • 解决办法二:重新购买经典网络的ECS实例。但是VPC比经典网络更安全,建议您使用VPC。
        说明:ECS实例不支持从VPC迁移到经典网络。
      • 解决办法三:使用RDS实例的公网连接地址连接RDS实例,即ECS实例通过公网连接RDS实例。这种方式的性能、安全性、稳定性较差。
    • ECS实例采用经典网络而RDS实例采用专有网络的场景:
      • 解决办法一(推荐):将ECS实例从经典网络迁移到VPC,具体操作请参见单ECS迁移示例
        说明:迁移后,两者必须处于同一个VPC,才能内网互通。
      • 解决办法二:将RDS实例从VPC切换为经典网络。但是VPC比经典网络更安全,建议您使用VPC。
      • 解决办法三:开通ClassicLink功能,使经典网络的ECS实例可以和VPC中的RDS实例通过内网互通。
        说明:如开通ClassicLink功能后网络不通,请参见建立ClassicLink连接后经典网络和VPC网络不通的排查思路
      • 解决办法四:使用RDS实例的公网连接地址连接RDS实例,即ECS实例通过公网连接RDS实例。这种方式的性能、安全性、稳定性较差。
  3. 请确保ECS和RDS实例在同一个专有网络中(专有网络ID相同)。
    如果专有网络不同,请参见以下方法进行处理:
    • 解决办法一(推荐):将RDS实例迁移到ECS实例所在的VPC,具体操作请参见切换专有网络VPC和虚拟交换机切换网络类型。先将RDS实例的网络类型从VPC切换到经典网络,再切换回VPC,切换时选择ECS实例所在的VPC。
    • 解决办法二:在两个VPC之间建立云企业网
    • 解决办法三:通过公网互通。这种方式的性能、安全性、稳定性较差。
  4. 检查ECS实例的内网IP地址是否已添加到RDS实例的白名单。如果未添加,请参见设置白名单
  5. 核实主机到RDS网络是否正常。在ECS实例上执行以下命令,测试是否可以正常连接到RDS实例地址的端口。
    telnet [$RDS_IP] [$Port]
    说明
    • [$RDS_IP]为RDS实例的连接地址。
    • [$Port]为数据库的端口号,如果修改过数据库的端口,则将端口替换为修改后的端口即可。MySQL的RDS实例默认端口是3306,SQL Server的RDS实例默认端口是3433。
    • 如果可以通信,则说明网络正常的。
    • 如果端口不通,说明网络异常,请排查服务器的网络问题,详情请参见解决无法连接RDS实例的问题

ECS以外的设备无法访问RDS的解决办法

ECS以外的设备访问RDS时,只能通过外网连接。如果连接失败,解决办法如下所示:

  1. 检查是否已设置RDS白名单。如果未设置,请参见设置白名单
  2. 如果开启了高安全白名单模式,需确保设备公网IP地址是添加到了经典网络的分组。
    说明:专有网络的分组不适用于公网。
  3. 如果您已设置白名单,那么连接失败很可能是因为您在白名单中添加的设备公网IP地址并非设备真正的出口IP地址。原因如下所示:
    说明:关于确认设备公网IP地址的方法,请参见RDS MySQL、MariaDBSQL Server
    • 公网IP地址不固定,可能会变动。
    • IP地址查询工具或网站查询的公网IP地址不准确。
  4. 检查您使用的连接地址是否为RDS的内网地址。如果是,需要改为外网地址。
    说明
    • 如果RDS实例没有外网地址,请申请外网地址
    • ECS和DMS以外的设备无法通过内网访问RDS(除非使用物理专线)。

适用于

  • 云数据库RDS MySQL版
  • 云数据库RDS MariaDB TX版