[MySQL]优化最大连接数

时间:2022-10-03 11:52:40

在项目或是在系统运维中,有时候我们会遇见“MySQL:ERROR 1040:Too many connections的异常。一种原因应用访问量过高,未释放连接数且目前服务器的连接数已达MySQL的上限导致服务器抗不住,这时就要考虑增加从服务器分散读压力,另一种原因就是MySQL配置文件中max_connections参数值过小。

通常,MySQL的最大连接数默认是100,最大可达到16384。

首先,我们来查看MySQL的最大连接数:

1
2
3
4
5
6
7
mysql> show variables like '%max_connections%' ;
+ -----------------+-------+
| Variable_name   | Value |
+ -----------------+-------+
| max_connections | 100   |
+ -----------------+-------+
1 row in set (0.00 sec)
    其次,查看服务器响应的最大连接数:
1
2
3
4
5
6
7
mysql> show global status like 'Max_used_connections' ;
+ ----------------------+-------+
| Variable_name        | Value |
+ ----------------------+-------+
| Max_used_connections | 321   |
+ ----------------------+-------+
1 row in set (0.00 sec)

可以看到服务器响应的最大连接数为321,远远大于MySQL服务器允许的最大连接数值。

对于MySQL服务器最大连接数值的设置范围比较理想的是:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明MySQL服务器最大连接上限值设置过高。

1
Max_used_connections / max_connections * 100% = 321 / 100 * 100% = 321%

现在我们可以看到占比远大于10%,远远不能满足应用的要求,因此,增大MySQL的最大连接刻不容缓。

方法1:通过命令行修改

root@mysql>mysql -uroot -p123@abc

msyql>set global max_connections=3210;(设置最大连接数为3210,可以再次查看是否设置成功)

mysql>show variables like 'max_connections';(查看是否设置成功)

mysql>exit

这种设置方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效。一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。

方法2:修改配置文件

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

max_connections = 3210

    修改完后,重启MySQL服务。