#### 6.4.2.1 连接控制插件安装

[](<>)[](<>)[](<>)[](<>)

本节介绍如何安装连接控制插件，`连接控制`和`CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS`.有关安装插件的一般信息，请参阅[第 5.6.1 节，“安装和卸载插件”](plugin-loading.html).

要被服务器使用，插件库文件必须位于 MySQL 插件目录（由[`插件目录`](server-system-variables.html#sysvar_plugin_dir)系统变量）。如有必要，通过设置值来配置插件目录位置[`插件目录`](server-system-variables.html#sysvar_plugin_dir)在服务器启动时。

插件库文件的基本名称是`连接控制`.文件名后缀因平台而异（例如，`。所以`对于 Unix 和类 Unix 系统，`.dll`对于 Windows）。

要在服务器启动时加载插件，请使用[`--plugin-load-add`](server-options.html#option_mysqld_plugin-load-add)选项来命名包含它们的库文件。使用这种插件加载方法，每次服务器启动时都必须给出该选项。例如，将这些行放在服务器中`我的.cnf`文件，调整`。所以`根据需要为您的平台添加后缀：

```
[mysqld]
plugin-load-add=connection_control.so
```

修改后`我的.cnf`, 重启服务器使新设置生效。

或者，要在运行时加载插件，请使用这些语句，调整`。所以`根据需要为您的平台添加后缀：

```
INSTALL PLUGIN CONNECTION_CONTROL
  SONAME 'connection_control.so';
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
  SONAME 'connection_control.so';
```

[`安装插件`](install-plugin.html)立即加载插件，并将其注册到`mysql.plugins`系统表，以使服务器在每次后续正常启动时加载它，而无需[`--plugin-load-add`](server-options.html#option_mysqld_plugin-load-add).

要验证插件安装，请检查[`INFORMATION_SCHEMA.PLUGINS`](information-schema-plugins-table.html)表或使用[`显示插件`](show-plugins.html)声明（见[第 5.6.2 节，“获取服务器插件信息”](obtaining-plugin-information.html)）。例如：

```
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        |
+------------------------------------------+---------------+
```

如果插件无法初始化，请检查服务器错误日志以获取诊断消息。

如果插件之前已经注册过[`安装插件`](install-plugin.html)或装载[`--plugin-load-add`](server-options.html#option_mysqld_plugin-load-add), 你可以使用`--连接控制`和`--connection-control-failed-login-attempts`服务器启动时控制插件激活的选项。例如，要在启动时加载插件并防止它们在运行时被删除，请使用以下选项：

```
[mysqld]
plugin-load-add=connection_control.so
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
```

如果希望防止服务器在没有给定连接控制插件的情况下运行，请使用选项值`力量`要么`FORCE_PLUS_PERMANENT`如果插件未成功初始化，则强制服务器启动失败。

笔记

可以安装一个插件而不安装另一个插件，但必须同时安装两个插件才能获得完整的连接控制功能。特别是，只安装`CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS`插件用处不大，因为没有`连接控制`插件来提供填充的数据[`CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS`](information-schema-connection-control-failed-login-attempts-table.html)表，表总是空的。

-   [连接延迟配置](connection-control-installation.html#connection-control-plugin-delay-configuration)

-   [连接故障评估](connection-control-installation.html#connection-control-plugin-failure-assessment)

-   [连接失败监控](connection-control-installation.html#connection-control-plugin-failure-monitoring)

##### 连接延迟配置

要启用配置其操作，`连接控制`插件公开了这些系统变量：

-   [`connection_control_failed_connections_threshold`](connection-control-variables.html#sysvar_connection_control_failed_connections_threshold)：在服务器为后续连接尝试添加延迟之前允许帐户的连续失败连接尝试次数。要禁用失败连接计数，请设置[`connection_control_failed_connections_threshold`](connection-control-variables.html#sysvar_connection_control_failed_connections_threshold)为零。

-   [`connection_control_min_connection_delay`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)：超过阈值的连接失败的最小延迟（以毫秒为单位）。

-   [`connection_control_max_connection_delay`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)：超过阈值的连接失败的最大延迟（以毫秒为单位）。

    如果[`connection_control_failed_connections_threshold`](connection-control-variables.html#sysvar_connection_control_failed_connections_threshold)非零，失败连接计数已启用并具有以下属性：

-   延迟为零[`connection_control_failed_connections_threshold`](connection-control-variables.html#sysvar_connection_control_failed_connections_threshold)连续失败的连接尝试。

-   此后，服务器为后续的连续尝试添加越来越多的延迟，直到成功连接。初始未调整延迟从 1000 毫秒（1 秒）开始，每次尝试增加 1000 毫秒。也就是说，一旦为帐户激活延迟，后续失败尝试的未调整延迟为 1000 毫秒、2000 毫秒、3000 毫秒等。

-   客户经历的实际延迟是未经调整的延迟，调整到位于[`connection_control_min_connection_delay`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)和[`connection_control_max_connection_delay`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)系统变量，包括在内。

-   为帐户激活延迟后，该帐户之后的第一次成功连接也会经历延迟，但会为后续连接重置失败计数。

    例如，使用默认值[`connection_control_failed_connections_threshold`](connection-control-variables.html#sysvar_connection_control_failed_connections_threshold)值为 3 时，帐户前三个连续失败的连接尝试没有延迟。帐户在第四次和后续失败连接中经历的实际调整延迟取决于[`connection_control_min_connection_delay`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)和[`connection_control_max_connection_delay`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)价值观：

-   如果[`connection_control_min_connection_delay`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)和[`connection_control_max_connection_delay`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)是 1000 和 20000，调整后的延迟与未调整的延迟相同，最大为 20000 毫秒。第四个和后续失败的连接延迟 1000 毫秒、2000 毫秒、3000 毫秒等。

-   如果[`connection_control_min_connection_delay`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)和[`连接\控制\最大\连接\延迟`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)如果是1500和20000，则第四次和后续失败连接的调整延迟为1500毫秒、2000毫秒、3000毫秒，以此类推，最多可达20000毫秒。

-   如果[`连接\控制\最小\连接\延迟`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)和[`连接\控制\最大\连接\延迟`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)为2000和3000，第四个和后续失败连接的调整延迟分别为2000毫秒、2000毫秒和3000毫秒，所有后续失败连接的延迟也为3000毫秒。

    你可以设定`连接控制`服务器启动或运行时的系统变量。假设您希望在服务器开始延迟其响应之前，允许连续四次失败的连接尝试，最小延迟为2000毫秒。要在服务器启动时设置相关变量，请在服务器中放置以下行`我的cnf`文件：


```
[mysqld]
plugin-load-add=connection_control.so
connection_control_failed_connections_threshold=4
connection_control_min_connection_delay=2000
```

要在运行时设置并保存变量，请使用以下语句：

```
SET PERSIST connection_control_failed_connections_threshold = 4;
SET PERSIST connection_control_min_connection_delay = 2000;
```

[`设定持续时间`](set-variable.html)为正在运行的MySQL实例设置一个值。它还会保存该值，从而将其带入后续服务器重启。要更改正在运行的MySQL实例的值，而不将其带入后续重新启动，请使用`全球的`关键字而不是`坚持`看见[第13.7.6.1节，“设置变量赋值语法”](set-variable.html).

这个[`连接\控制\最小\连接\延迟`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)和[`连接\控制\最大\连接\延迟`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)系统变量的最小值和最大值分别为1000和2147483647。此外，每个变量的允许值范围还取决于另一个变量的当前值：

-   [`连接\控制\最小\连接\延迟`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)不能设置为大于的当前值[`连接\控制\最大\连接\延迟`](connection-control-variables.html#sysvar_connection_control_max_connection_delay).

-   [`连接\控制\最大\连接\延迟`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)不能设置为小于的当前值[`连接\控制\最小\连接\延迟`](connection-control-variables.html#sysvar_connection_control_min_connection_delay).

    因此，要进行某些配置所需的更改，可能需要按特定顺序设置变量。假设当前的最小延迟和最大延迟分别为1000和2000，并且希望将它们设置为3000和5000。你不能先定[`连接\控制\最小\连接\延迟`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)因为这比电流大[`连接\控制\最大\连接\延迟`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)2000年的价值。相反，设置[`连接\控制\最大\连接\延迟`](connection-control-variables.html#sysvar_connection_control_max_connection_delay)到5000，然后设定[`连接\控制\最小\连接\延迟`](connection-control-variables.html#sysvar_connection_control_min_connection_delay)到3000。

##### 连接故障评估

当`连接控制`插件安装后，它会检查连接尝试并跟踪它们是否失败或成功。为此，失败的连接尝试是指客户端用户和主机匹配已知的MySQL帐户，但提供的凭据不正确，或者与任何已知帐户都不匹配。

失败连接计数基于每次连接尝试的用户/主机组合。确定适用的用户名和主机名时会考虑代理，具体如下：

-   如果客户端用户代理另一个用户，则失败连接计数的帐户是代理用户，而不是代理用户。例如，如果`外部的_user@example.com`代理`代理_user@example.com`，连接计数使用代理用户，`外部的_user@example.com`，而不是代理用户，`代理_user@example.com`二者都`外部的_user@example.com`和`代理_user@example.com`列表中必须有有效的条目`mysql。使用者`系统表以及它们之间的代理关系必须在`mysql。私人代理人`系统表（参见[第6.2.19节“代理用户”](proxy-users.html)).

-   如果客户端用户不代理其他用户，但与`mysql。使用者`输入，计数使用[`当前用户（）`](information-functions.html#function_current-user)与该条目对应的值。例如，如果用户`用户1`从主机连接`1号旅社。实例通用域名格式`匹配a`user1@host1.example.com`输入，计数使用`user1@host1.example.com`。如果用户与`用户1@%。实例通用域名格式`, `用户1@%。通用域名格式`或`用户1@%`相反，计数使用`用户1@%。实例通用域名格式`, `用户1@%。通用域名格式`或`用户1@%`分别地

    对于刚才描述的情况，连接尝试与一些`mysql。使用者`请求是否成功取决于客户端是否提供了正确的身份验证凭据。例如，如果客户端提供了错误的密码，则连接尝试将失败。

    如果连接尝试与否匹配`mysql。使用者`进入后，尝试失败。在这种情况下，没有[`当前用户（）`](information-functions.html#function_current-user)值可用，并且连接失败计数使用由服务器确定的客户端和客户端主机提供的用户名。例如，如果客户端尝试以用户身份连接`用户2`来自主持人`2号旅社。实例通用域名格式`，用户名部分在客户端请求中可用，服务器确定主机信息。用于计数的用户/主机组合为`user2@host2.example.com`.

笔记

服务器维护关于哪些客户端主机可能连接到服务器的信息（基本上是主机值的并集）`mysql。使用者`条目）。如果客户端试图从任何其他主机连接，服务器会在连接设置的早期阶段拒绝该尝试：

```
ERROR 1130 (HY000): Host 'host_name' is not
allowed to connect to this MySQL server
```

因为这种拒绝发生得很早，`连接控制`看不见，也不算。

##### 连接故障监控

要监视失败的连接，请使用以下信息源：

-   这个[`连接\u控制\u延迟\u生成`](connection-control-variables.html#statvar_Connection_control_delay_generated)status变量表示服务器对失败连接尝试的响应增加延迟的次数。这不计算在达到所定义的阈值之前发生的尝试次数[`连接\u控制\u失败\u连接\u阈值`](connection-control-variables.html#sysvar_connection_control_failed_connections_threshold)系统变量。

-   这个`信息模式` [`连接\u控制\u失败\u登录\u尝试`](information-schema-connection-control-failed-login-attempts-table.html)表提供了有关每个帐户（用户/主机组合）当前连续失败连接尝试次数的信息。这将统计所有失败的尝试，无论它们是否被延迟。

    给…赋值[`连接\u控制\u失败\u连接\u阈值`](connection-control-variables.html#sysvar_connection_control_failed_connections_threshold)在运行时有以下影响：

-   所有累积的失败连接计数器都重置为零。

-   这个[`连接\u控制\u延迟\u生成`](connection-control-variables.html#statvar_Connection_control_delay_generated)状态变量重置为零。

-   这个[`连接\u控制\u失败\u登录\u尝试`](information-schema-connection-control-failed-login-attempts-table.html)桌子空了。
