问题现象:业务后台连接数据库失败,查看数据库日志,一直报 too many connections,登陆数据库报错一样,重启数据库,登陆数据库
show processlist;
显示如下:
Id | User | Host | db | Command | Time | State | Info |
2 | system user | | NULL | Connect | 1245 | Reconnecting after a failed master event read | NULL |
3 | system user | | NULL | Connect | 1235 | Slave has read all relay log:waiting for more update | NULL |
4 | system user | | NULL | Connect | 1221 | Waiting for an event from coordinary | NULL |
5 | system user | | NULL | Connect | 1219 | Waiting for an event from coordinary | NULL |
6 | system user | | NULL | Connect | 1211 | Waiting for an event from coordinary | NULL |
7 | system user | | NULL | Connect | 1206 | Waiting for an event from coordinary | NULL |
问题分析:
在本地数据库上发生过 “Waiting in connection_control plugin" 的连接延迟状态中,而应用又不断尝试新的请求,连接堆积,业务连接请求慢的问题。
问题的发生原因是由于连接异常导致 ConnectionControl 插件进行了拦截,连接用户身份验证处于 “Waiting in connectioncontrol plugin" 的连接延迟状态
解决方案:
1.登陆数据库,查看配置参数:
show variables like '%connection_control%";
Variable_name | Value |
conection_control_failed_connections_threshold | 3 |
conection_control_max_connections_delay | 2147368762 |
conection_control_min_connections_delay | 1000 |
2.修改配置参数,重启数据库或者杀掉业务连接进程
set global conection_control_failed_connections_threshold=0;
set global conection_control_max_connections_delay=1000;
查看配置是否生效
show variables like '%connection_control%";
Variable_name | Value |
conection_control_failed_connections_threshold | 0 |
conection_control_max_connections_delay | 1000 |
conection_control_min_connections_delay | 1000 |
修改配置文件
sed -i "154iconection_control_failed_connections_threshold=0" /etc/my.cnf
sed -i "155iconection_control_max_connections_delay=1000" /etc/my.cnf