现象:
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