Mysql常见问题:Too many connections

By | 2023年8月8日

Too many connections

项目中可能会遇到MySQL: ERROR 1040: Too many connections”的异常情况,造成这种情况的一种原因是访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力;另一种原因就是MySQL配置文件中max_connections值过小。

问题排查

首先我们来看下mysql的最大连接数:

mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.01 sec)

然后查看历史使用的最大连接数:

mysql> show variables like '%Max_used_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 152   |
+-----------------+-------+
1 row in set (0.01 sec)

注:由于Mysql连接数满的时候也会给超级用户预留一个连接数,以便运维数据库,因此会出现使用过的最大连接数比设置的最大连接数多1

由这个结果可以看出,Mysql的连接数被占满了,此时两种方法,一个是减少已有的连接,另一个是增加max_connections上限值

解决方法

通过增加max_connections值来解决

这个参数实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;
增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;

该参数设置过小的最明显特征是出现”Too many connections”错误;

设置这个最大连接数值:

mysql> set GLOBAL max_connections=1024;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1024  |
+-----------------+-------+
1 row in set (0.01 sec)

可以看到此时已经生效了,但是重启Mysql后会被重置

修改配置文件:

修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值:
max_connections=1024