RDS MySQL连接失败报2003/10060错误 无法创建数据库
RDS MySQL 10060连接超时排查方案
mysql.connector.errors.InterfaceError: 2003伴随10060错误码,本质是TCP连接请求超时,流量根本没到达MySQL服务层,和填写的用户名、密码是否正确没有关系,不用在账号权限上反复排查,按以下优先级逐一验证:
- 先核对RDS公网配置是否真的生效
开启“公网可访问”开关不代表自动分配了公网连接地址:进入RDS实例详情页,找到连接信息板块,确认存在独立的公网连接端点,且该端点已经绑定了有效的公网IP(部分云厂商需要单独申请弹性公网IP绑定,不会自动分配)。不要把VPC内网端点当成公网端点填,这是最高发的配置错误。 - 核对监听端口配置
确认实例详情页标注的MySQL公网监听端口是3306,如果自定义修改过端口,Python代码连接时必须显式传入port=你的实际端口参数,驱动默认只会连接3306端口。 - 排查多层访问控制拦截
放通安全组所有流量不代表流量不会被拦截:- 检查实例所在VPC的网络ACL规则:网络ACL作用在子网层面,优先级高于安全组,如果入方向规则没有放通本地客户端的公网IP到3306端口的访问,流量会在到达实例前被丢弃
- 不要长期配置0.0.0.0/0的全放通规则:这种配置很容易触发云平台的基础DDoS防护、异常流量拦截机制,把本地的公网IP单独加到RDS的IP白名单、安全组入方向规则里,再测试连接。
- 跳过业务代码先做基础网络连通性验证
直接跑Python代码测试没有意义,先在运行代码的机器上做两个基础测试:- Windows系统开命令提示符执行
telnet 你的RDS公网端点 3306,Linux/macOS执行nc -zv 你的RDS公网端点 3306 - 如果上述命令提示连接失败/超时,问题100%出在网络链路,和Python驱动、数据库配置无关;如果命令提示连接成功,回去检查代码里的host参数是否填错——不要带
http:///https://前缀、不要多打前后空格、不要填只读实例的端点。
- Windows系统开命令提示符执行
- 内网连通性交叉验证
临时在RDS同VPC同可用区下开一台按量付费的ECS,用RDS内网端点连接实例,如果内网能正常连通、公网连不通,直接提工单找云厂商排查公网链路故障即可,不用自己反复调整配置。
连通性验证通过后,可以用如下代码创建数据库:
import mysql.connector mydb = mysql.connector.connect( host="替换为你的RDS纯公网端点", user="admin", password="admin123", port=3306 # 若自定义过端口请替换为实际值 ) mycursor = mydb.cursor() mycursor.execute("CREATE DATABASE test")
连通性测试完成后请立刻收紧安全组、IP白名单规则,仅允许信任的IP访问3306端口,避免实例被暴力破解攻击。
内容的提问来源于stack exchange,提问作者MP32
相关产品推荐
相关产品推荐

