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

每周出现3-4次SQLSTATE[HY000] [2002] Connection refused报错如何排查?

SQLSTATE[HY000] [2002] Connection refused 报错原因及排查解决方法

SQLSTATE[HY000] [2002] Connection refused属于数据库连接类报错,本质是应用发起的数据库TCP连接请求被目标端直接拒绝,每周3-4次的偶发触发场景基本可以排除固定配置错误问题,均为临时异常导致。

常见产生原因

  • 数据库服务偶发重启或崩溃:数据库侧触发定时自动重启、OOM Killer因内存占用过高kill掉数据库进程,重启间隙的请求会直接返回连接拒绝
  • 数据库连接数耗尽:数据库max_connections参数配置过低,数据同步、查询高峰期的并发请求占满所有可用连接后,新的连接请求会被直接拒绝
  • 网络层偶发故障:服务器间防火墙规则临时波动、交换机端口丢包、TCP握手队列占满导致SYN包被丢弃,若用域名连接数据库还可能是DNS解析偶发失败
  • 服务器资源饱和:应用端或数据库端的CPU、内存、磁盘IO在高峰期被占满,无法响应新的连接请求,比如批量同步任务占满磁盘IO后,数据库无法处理新连接建立请求
  • 端口监听异常:数据库侧的端口监听偶发中断,或操作系统出现临时端口占用冲突,导致短时间内端口无法正常响应连接请求

排查解决方法

数据库侧排查

  • 查看数据库错误日志,匹配报错时间点是否有进程重启、崩溃、OOM相关记录,MySQL默认错误日志路径为/var/log/mysql/error.log
  • 执行show global variables like 'max_connections';查询数据库最大连接数配置,再执行show global status like 'Threads_connected';查看历史连接峰值,若峰值接近最大连接数,将max_connections调整到合理值即可

网络层排查

  • 确认应用连接数据库用的是IP还是域名,若使用域名,检查报错时间点的DNS解析日志,确认是否存在解析失败问题
  • 在应用服务器上部署定时端口探测脚本,每1分钟执行一次nc -zv 数据库IP 数据库端口,记录探测失败的时间点和系统日志做匹配,确认是否为网络波动导致
  • 检查两端服务器的防火墙、安全组规则,确认无临时拦截策略,可适当调大操作系统TCP参数net.core.somaxconn、net.ipv4.tcp_max_syn_backlog,避免握手队列满导致连接被丢弃

资源层排查

  • 通过监控查看报错时间点应用端、数据库端的CPU、内存、磁盘IO、网络带宽占用情况,若为同步任务高峰期资源饱和导致,可调整同步任务执行时间、做请求限流,或升级服务器配置

临时兜底方案

短时间无法定位根因时,可在应用侧的数据库连接配置中增加重试机制,连接失败后间隔13秒重试23次,基本可以覆盖绝大多数偶发连接拒绝场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:57:02