生产环境收到一波连接数告警,而该业务实际压力并不大。查看后发现有大量的waiting in connection_control plugin状态的连接等待。该等待连接数有一千多个。
connection_control组件是由于前段时间的安全合规审查要求安装的。怕影响生产真实连接,将单个用户的登陆失败重试connection_control_failed_connections_threshold值调的较高。正常情况下不应该会出现大量的失败连接,经过排查最终发现是由于云主机环境的zabbix监控经过多次迁移,zabbix连接用的mysql账户及密码都作过调整,将老版本的zabbix服务禁用后问题解决。
现有大量的连接数,直接通过pt-kill处理即可。
pt-kill --user=root --ask-pass --no-version-check --match-command Connect --match-state "Waiting in connection_control plugin" --victims all --interval 10 --print --kill
由于pt-kill安装需要依赖第三方工具包(yum -y install perl perl-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5)
有些生产环境不能直接访问外网,无法部署工具。可通过SQL语句将需要的kill的连接拼凑成完整的kill语句执行,SQL如下:
select concat('kill ',id,';') as killsql into outfile '/tmp/kill.sql' from information_schema.processlist where state='Waiting in connection_control plugin' and command = 'Connect' and user='unauthenticated user';
执行完成后,可直接执行生成的kill.sql文件。mysql -uroot -p -e"source /tmp/kill.sql"