MySQL报错:1040 Too many connections

本文介绍了当遇到MySQL客户端或应用代码报错提示'Toomanyconnections'时的排查步骤及解决方案,包括调整MySQL配置参数、优化Linux服务器句柄数及配置MysqlRouter代理等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象:

MySQL客户端或应用代码报错出现关键字:Too many connections

使用MySQL的root权限账号,查看MySQL现状

a)、查看配置的总连接数

        show variables like '%connections%';

        如上图,可以看到配置连接数。

b)、查看当前使用的连接总数

        show global status like 'max_used_connections';

        当前MySQL已经占用的连接数。

常见错误原因及解决办法如下

1、MySQL配置的连接数不够

        登录MySQL,设置连接数

        临时修改:

                set GLOBAL MAX_CONNECTIONS=10000;

                set GLOBAL MAX_USER_CONNECTIONS=2000;

                #直接生效,不需重启MySQL;重启MySQL会失效。

        永久修改:

                vim /etc/my.cnf

                在[mysqld]模块,添加如下配置

                max_connections = 10000

                max_user_connections = 1500

                #不会直接生效,需重启MySQL。

2、Linux服务器的句柄数不足

        Linux服务器如果不进行参数调优,默认的单进程文件打开数是1024。此时会导致MySQL还未达到设置的1024以上的数值,就报错连接数不足。优化服务器句柄数的常用方法:

        临时修改:

                ulimit -HSn 65535

        永久修改:

                vim /etc/security/limits.conf

                在文件末尾添加以下内容

                * hard nofile 20000

                * soft nofile 15000

                #有些系统不能生效需要指定对应的用户名才行,不能用"*"

        系统Centos7.6及以上,修改方法。

        sed -i “s/#DefaultLimitCORE=/DefaultLimitCORE=infinity/g” /etc/systemd/system.conf

        sed -i “s/#DefaultLimitNOFILE=/DefaultLimitNOFILE=65535/g” /etc/systemd/system.conf

        sed -i “s/#DefaultLimitNPROC=/DefaultLimitNPROC=65535/g” /etc/systemd/system.conf

        需要重启服务器才能生效。

3、MysqlRouter代理的默认值限制

        项目中经常用到MysqlRouter代理服务,但很多人没有想到它也有连接数配置参数,如果不进行配置,参数的默认值是512

        修改配置文件mysqlrouter.conf

                vim /etc/mysqlrouter/mysqlrouter.conf

        在[routing:mycluster_rw]模块下添加max_connections配置

                max_connections=1500

        然后重启MysqlRouter参数生效。sudo systemctl restart mysqlrouter

### Spring Boot 数据库连接池配置 Too Many Connections 解决方案 当遇到 `Too many connections` 错误时,表明应用程序尝试打开的数据库连接数目超出了 MySQL 配置允许的最大值。对于使用 Spring Boot 的应用来说,这通常是因为 Tomcat 连接池或 HikariCP 默认配置不当造成的。 #### 修改 MySQL 最大连接数 为了防止因数据库连接过多而导致的问题,可以通过调整 MySQL 的最大连接数来缓解这一状况: ```sql SET GLOBAL max_connections = 500; ``` 上述命令会临时更改服务器上的最大并发连接数至500个;要永久生效,则需编辑MySQL配置文件(通常是my.cnf),并重启服务[^2]。 #### 调整 Spring Boot 应用中的数据源属性 针对 Spring Boot 中使用的 Tomcat 或者 HikariCP 连接池,可以在 application.properties 文件内指定更合理的参数以优化性能表现: ##### 对于 Tomcat Pool: ```properties spring.datasource.tomcat.max-active=100 spring.datasource.tomcat.initial-size=10 spring.datasource.tomcat.min-idle=10 spring.datasource.tomcat.max-wait=-1 ``` 这些设置控制着活动连接的数量上限(`max-active`)、启动时创建的初始连接数量(`initial-size`)以及保持空闲状态下的最小连接量(`min-idle`)等重要方面[^1]。 ##### 如果采用的是HikariCP作为默认实现的话: ```properties spring.datasource.hikari.maximumPoolSize=100 spring.datasource.hikari.minimumIdle=10 ``` 这里同样设置了最大的活跃连接数 (`maximumPoolSize`) 和最低闲置连接数 (`minimumIdle`). 特别注意,在某些情况下,默认的最小空闲连接数值可能过高(如提到的例子中为160),应适当降低这个值以避免不必要的资源占用. #### 单元测试环境特殊处理 考虑到带有@SpringBootTest 注解的集成测试可能会频繁触发新的上下文加载过程从而重复初始化多个独立的数据源实例,建议采取措施确保每次运行结束后都能正确清理掉不再需要的对象引用,比如利用 @DirtiesContext 来标记哪些组件应该被重置或是销毁。另外也可以考虑改写成基于Mockito或其他mock工具构建起来的纯内存级模拟场景来进行逻辑验证工作[^3]. 最后值得注意的一点是在实际生产环境中应当密切监控数据库的实际负载情况,并据此动态调整相关参数设定,确保系统稳定性和响应速度达到最佳平衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值