在项目或是在系统运维中,有时候我们会遇见“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服务。