首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 8.0.17 “Too Many Connections” 排查指南

MySQL 8.0.17 “Too Many Connections” 排查指南

作者头像
SmileNicky
发布2025-10-14 08:41:41
发布2025-10-14 08:41:41
200
代码可运行
举报
文章被收录于专栏:Nicky's blogNicky's blog
运行总次数:0
代码可运行

MySQL 8.0.17 “Too Many Connections” 排查与优化指南

在 MySQL 8.0.17 中,当出现“Too many connections”错误时,通常意味着数据库连接数已达上限。这不仅会影响应用性能,还可能导致连接池(如 Druid)无法获取新连接。以下是一个清晰简洁的排查与优化指南,帮助你快速解决问题。

一、现象

MySQL 返回错误码 1040,状态码 08004,提示“Too many connections”。Druid 连接池无法获取连接。

代码语言:javascript
代码运行次数:0
运行
复制
java.sql.SQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"

二、快速确认

登录 MySQL

代码语言:javascript
代码运行次数:0
运行
复制
-- 当前允许的最大连接数
SHOW VARIABLES LIKE 'max_connections';

-- 当前已打开的连接数
SHOW STATUS LIKE 'Threads_connected';

-- 历史峰值
SHOW STATUS LIKE 'Max_used_connections';

查看当前连接明细

代码语言:javascript
代码运行次数:0
运行
复制
SHOW PROCESSLIST;

三、临时方法

临时提高连接上限

代码语言:javascript
代码运行次数:0
运行
复制
SET GLOBAL max_connections = 300;   -- 根据内存评估

四、服务器端配置

修改配置文件(my.cnf / my.ini)

代码语言:javascript
代码运行次数:0
运行
复制
[mysqld]
max_connections = 300          # 建议 300~500 起步
wait_timeout    = 300          # 5 分钟后回收空闲连接
interactive_timeout = 300

重启 MySQL 使配置生效,或使用:

代码语言:javascript
代码运行次数:0
运行
复制
SET PERSIST max_connections = 300;

启用自适应参数(单机专用服务器推荐)

代码语言:javascript
代码运行次数:0
运行
复制
[mysqld]
innodb_dedicated_server = ON

五、应用侧检查

检查连接池配置

代码语言:javascript
代码运行次数:0
运行
复制
spring.datasource.druid.max-active=50
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-wait=3000
spring.datasource.druid.remove-abandoned=true
spring.datasource.druid.remove-abandoned-timeout=60
spring.datasource.druid.log-abandoned-connections=true

确保资源正确关闭 在代码中确保 ConnectionStatementResultSetfinally 块中关闭,防止连接泄露。

六、业务侧检查

  1. 监控业务流量
    • 检查业务高峰期的流量,确认是否有异常流量导致连接数激增。
    • 使用监控工具(如 Prometheus、Grafana)实时监控业务流量。
  2. 分析业务逻辑
    • 检查业务代码中是否有不必要的数据库连接操作。
    • 优化业务逻辑,减少不必要的数据库请求。

七、高并发优化

引入连接代理

  • 使用 ProxySQL、MySQL Router 或 ShardingSphere-Proxy 进行连接复用。

读写分离

  • 使用 InnoDB ReplicaSet 快速拉起只读实例,分担主库压力。

关闭死锁检测(极端写场景)

代码语言:javascript
代码运行次数:0
运行
复制
SET GLOBAL innodb_deadlock_detect = OFF;

八、一键检查脚本(Linux)

代码语言:javascript
代码运行次数:0
运行
复制
mysql -uroot -p'密码' -e "
SELECT @@max_connections AS max_conn,
       VARIABLE_VALUE   AS threads_conn
FROM performance_schema.global_status
WHERE VARIABLE_NAME='Threads_connected';
"

九、小结流程

代码语言:javascript
代码运行次数:0
运行
复制
发现 1040 → 查看 max_connections / Threads_connected → 临时 SET GLOBAL → 配置 my.cnf → 重启 → 检查应用池设置 → 检查业务逻辑 → 长期监控

十、总结

通过以上步骤,你可以快速定位并解决 MySQL 8.0.17 的“Too many connections”问题。关键步骤包括快速确认问题、临时提高连接上限、持久化配置、检查应用和业务逻辑,以及优化高并发场景。希望这份指南能帮助你高效解决问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL 8.0.17 “Too Many Connections” 排查与优化指南
    • 一、现象
    • 二、快速确认
    • 三、临时方法
    • 四、服务器端配置
    • 五、应用侧检查
    • 六、业务侧检查
    • 七、高并发优化
    • 八、一键检查脚本(Linux)
    • 九、小结流程
    • 十、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档