mysql 连接控制插件
安装插件
查看当前插件
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'connection%';
Empty set (0.00 sec)
安装插件
方法一
my.cnf
[mysqld]
plugin-load-add=connection_control.so # 每次启动服务器时加载库。
connection-control=FORCE_PLUS_PERMANENT # 防止服务器在没有 CONNECTION_CONTROL插件的情况下运行,如果插件未成功初始化,则服务器启动失败。
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT # 防止服务器在没有 CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS 插件的情况下运行,如果插件未成功初始化,则服务器启动失败。
重启服务
# systemctl restart mysqld
方法二
mysql> INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
mysql> INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';
确认插件
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'connection%';
+------------------------------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+------------------------------------------+---------------+
| CONNECTION_CONTROL | ACTIVE |
| CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | ACTIVE |
+------------------------------------------+---------------+
2 rows in set (0.00 sec)
配置连接延迟
变量说明
使用这些服务器参数为失败的连接尝试配置服务器响应延迟:
- connection_control_failed_connections_threshold:在服务器为后续连接尝试添加延迟之前允许帐户连续失败的连接尝试次数。要禁用失败连接计数,请设置 connection_control_failed_connections_threshold 为零。
- connection_control_min_connection_delay:超过阈值的连接失败的最小延迟(以毫秒为单位)。
- connection_control_max_connection_delay:超过阈值的连接失败的最大延迟(以毫秒为单位)。
如果 connection_control_failed_connections_threshold 为非零,则启用失败连接计数并具有以下属性:
- connection_control_failed_connections_threshold 通过连续失败的连接尝试, 延迟为零 。
- 此后,服务器会为后续的连续尝试增加增加的延迟,直到成功连接为止。初始未调整的延迟从 1000 毫秒(1 秒)开始,每次尝试增加 1000 毫秒。也就是说,一旦为帐户激活延迟,后续失败尝试的未调整延迟为 1000 毫秒、2000 毫秒、3000 毫秒等。
- 客户端经历的实际延迟是未经调整的延迟,调整后位于 系统变量connection_control_min_connection_delay 和 系统变量的值范围内connection_control_max_connection_delay ,包括在内。
- 一旦为帐户激活了延迟,该帐户此后的第一次成功连接也会经历延迟,但后续连接的失败计数会重置。
-
- 例如,默认 connection_control_failed_connections_threshold 值为 3,则帐户的前三个连续失败连接尝试没有延迟。第四次和后续失败连接帐户经历的实际调整延迟取决于 connection_control_min_connection_delay 和 connection_control_max_connection_delay 值:
- 如果 connection_control_min_connection_delay 和 connection_control_max_connection_delay 分别为 1000 和 20000,则调整后的延迟与未调整的延迟相同,最大为 20000 毫秒。第四个和后续失败的连接会延迟 1000 毫秒、2000 毫秒、3000 毫秒,依此类推。
- 如果 connection_control_min_connection_delay 和 connection_control_max_connection_delay 分别为 1500 和 20000,则第四次及后续失败连接的调整后延迟为 1500 毫秒、2000 毫秒、3000 毫秒等,最大为 20000 毫秒。
- 如果 connection_control_min_connection_delay 和 connection_control_max_connection_delay 分别为 2000 和 3000,则调整后的第四个及后续失败连接的延迟分别为 2000 毫秒、2000 毫秒和 3000 毫秒,所有后续失败连接也延迟 3000 毫秒。
my.cnf
[mysqld]
connection_control_failed_connections_threshold=3
connection_control_min_connection_delay=1000
connection_control_max_connection_delay=2147483647
监控失败的连接尝试
mysql> SHOW STATUS LIKE 'Connection_control_delay_generated';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| Connection_control_delay_generated | 1 |
+------------------------------------+-------+
mysql> SELECT FAILED_ATTEMPTS FROM INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
+-----------------+
| FAILED_ATTEMPTS |
+-----------------+
| 4 |
+-----------------+