一个MYSQL CONNECTION 插件引起的连接问题,应用反应,数据库帐户经常连接不上,时好时坏。而且手动测试,也是hang在这里. 且数据库错误日志并无异常。
目录
- 适用范围
- 问题概述
- 问题原因
- 解决方案
- 参考文档
适用范围
5.7+
问题概述
应用反应,数据库帐户经常连接不上,时好时坏。而且手动测试,也是hang在这里,现象如下:
问题原因
通过手动测试,确实时连接不上。而且其这帐户正常。 查看错误日志并无异常。
随后能过root 帐户登录 ,查看了一上等待事件。
从processlis 上可以看出,连接一直在等待 connection_control plugin, 这里基本上可以确定是这个插件影引起的了。 随后我们也查看了插件和启用状态,为ACTIVE。
插件的参数配置:
参数说明如下:
connection_control_failed_connections_threshold:单个用户登录失败(由于密码错误引起)次数上限,默认3次, 这里设置的5次
connection_control_max_connection_delay:失败上限之后再次尝试登录前最大等待时间,单位ms
connection_control_min_connection_delay:失败上限之后再次尝试登录前最小等待时间,单位ms。 这里是15分钟
也就是说DB尝试5次错误输入密码后,在第6次登录时会delay 15分钟(由connection_control_min_connection_delay指定),同时Connection_control_delay_generated计数+1(若登录密码继续输入错误,则delay秒数与计数器继续增加。直到成功登录为止之后,此时delay清零。
我们可以查看Connection_control_delay_generated 信息,已有292次错误。
通过和客户确认,确实是在MYSQL服务上配置这connection插件和参数。
解决方案
- 临时解决办法 将connection_control_failed_connections_threshold 参数设置到足够大,或都将connection_control_min_connection_delay设置为足够小。这样客户的感知就会减小。
- 临时卸载connection 插件
mysql> UNINSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
mysql> UNINSTALL PLUGIN CONNECTION_CONTROL;
- 通过分析审计日志,找出连接失败的服务,确定连接配置的密码是否正常。
参考文档
https://dev.mysql.com/doc/refman/5.7/en/connection-control-installation.html