当程序出现MySQL: ERROR 1040: Too many connections
的错误信息时,抛却真的是访问量过高,MySQL服务器抗不住的情形,还有一种原因:你的MySQL数据库设置的max_connections
值过小。
一、查看设置
查看max_connections
设置。
如果当前业务系统确实MySQL并发连接数过高,可以在结合服务器性能的情形下,适当调整max_connections
参数。但是不能盲目调整该值,MySQL会为每个连接提供连接缓冲区,连接数越大,就会开销越多的内存。
二、如何平衡
查看当前最大使用连接数:
show global status like 'Max_used_connections';
对于mysql服务器最大连接数值的设置范围比较理想的是:服务器使用的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高。
max_used_connections / max_connections * 100% (理想值≈ 85%)
三、设置最大连接数
3.1 方法1
set GLOBAL max_connections=1024;
这种方式修改,修改的是内存配置,重启后会失效。
3.2 方法2
修改配置文件/var/my.cnf
或者/var/my.cnf.d/server.cnf
:
修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值:
max_connections=1024
这种设置需要重启mysql,是永久修改。
3.3 方法3
这种方式适合mysql 8以后的版本:
mysql> set persist max_connections=200;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%max_connections%';
四、检查是否生效
如果没有生效,检查下mysql允许打开的文件数,修改服务配置:
sudo vi /usr/lib/systemd/system/mariadb.service
添加如下内容:
[Service]新添加两行如下参数:
LimitNOFILE=10000
LimitNPROC=10000
重载系统服务,并重启mysql:
systemctl --system daemon-reload
systemctl restart mariadb.service
References:
- MySQL 8 新特性之持久化全局变量的修改;
- MySQL Persisted System Variables;
- Mysql 连接数,最大并发数设置;
- MySQL ERROR 1040: Too many connections;
最新评论
我的是ipv4网络,如何使用直播源啊!
我今天试了,不想啊,我的是新疆昌吉移动的网络。
收不到验证码电报
现在充值29起了