You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2环境下间歇性出现MySQL 2003连接错误无法定位根因求助

排查方向及解决方案

1. 网络层链路问题排查

  • 先排查AWS EC2实例的网络抖动问题:两台EC2如果在同一VPC下,先持续跑mtr双向检测丢包,建议至少跑24小时覆盖异常发生时段,重点看是否有随机丢包、路由跳数变更:
    # 应用服务器上执行,替换为数据库实例内网IP
    mtr --tcp --port 3306 -r -c 1000 <数据库内网IP>
    # 数据库服务器上反向执行,替换为应用服务器内网IP
    mtr --tcp --port <应用连接数据库的源端口段> -r -c 1000 <应用服务器内网IP>
    
  • 检查AWS安全组、网络ACL的临时规则是否有过期,或者是否触发了AWS隐性限流:EC2实例的网络性能和实例规格绑定,即使CPU内存使用率低,也可能达到实例的网络包转发/PPS上限,可在CloudWatch查看NetworkPacketsIn、NetworkPacketsOut、NetworkIn、NetworkOut指标,确认是否触及规格上限。
  • 排查TCP连接队列溢出问题:即使你已经调整了somaxconn和back_log参数,执行ss -lnt看MySQL监听端口的Send-Q值,如果值持续大于0说明连接队列溢出,需确认参数是否真的生效:
    # 确认内核参数生效
    sysctl net.core.somaxconn
    sysctl net.ipv4.tcp_max_syn_backlog
    # 确认MySQL启动的back_log参数生效
    mysql -e "show variables like 'back_log';"
    

2. MySQL层问题排查

  • 检查连接数是否真的充足:即使你调整了max_connections,需要确认异常发生时的实际连接数、是否有大量Sleep状态的连接占满连接池:
    -- 查看当前连接数
    show global status like 'Threads_connected';
    -- 查看所有连接状态
    show full processlist;
    
  • 排查是否有慢查询导致连接被占用:短时间大量查询卡住可能是触发了锁等待或者慢查询,开启慢查询日志,阈值设为1秒,捕获异常时段的慢查询,同时查看锁等待状态:
    show engine innodb status\G
    show global status like '%lock%';
    
  • 检查MySQL的DNS反解析设置:如果skip_name_resolve参数未开启,MySQL会对每个连接的IP做反解析,DNS波动会导致连接超时,建议直接在my.cnf添加skip_name_resolve参数后重启。

3. 应用层问题排查

  • 检查应用连接池配置:如果连接池的最大连接数超过MySQL的max_connections,或者连接池的超时时间设置不合理,会导致连接被复用时出现超时,建议确认连接池的maxWait、validationQuery配置是否正常,是否开启了连接有效性检测。
  • 排查应用端TCP参数:检查应用服务器的net.ipv4.tcp_tw_reuse、net.ipv4.tcp_timestamps参数是否开启,大量TIME_WAIT状态的连接会导致新连接无法建立。

内容的提问来源于stack exchange,提问作者aecend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:39:04