#### 17.4.10.1 安装半同步复制

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

半同步复制是使用插件实现的，插件必须安装在源和副本上，以使半同步复制在实例上可用。源和副本有不同的插件。安装插件后，您可以通过与其关联的系统变量来控制它。这些系统变量仅在安装了相关插件后才可用。

本节介绍如何安装半同步复制插件。有关安装插件的一般信息，请参阅[第 5.6.1 节，“安装和卸载插件”](plugin-loading.html).

要使用半同步复制，必须满足以下要求：

-   安装插件的能力需要支持动态加载的 MySQL 服务器。要验证这一点，请检查[`have_dynamic_loading`](server-system-variables.html#sysvar_have_dynamic_loading)系统变量是`是的`.二进制发行版应该支持动态加载。

-   复制必须已经在工作，请参阅[第 17.1 节，“配置复制”](replication-configuration.html).

-   不得配置多个复制通道。半同步复制仅与默认复制通道兼容。看[第 17.2.2 节，“复制通道”](replication-channels.html).

    从 MySQL 8.0.26 开始，提供了实现半同步复制的新版本插件，一个用于源服务器，一个用于副本。新插件在系统变量和状态变量中将术语“master”和“slave”替换为“source”和“replica”，您可以安装这些版本而不是旧版本。您不能在实例上同时安装相关插件的新旧版本。如果您使用新版本的插件，新的系统变量和状态变量可用，但旧的不可用。如果您使用旧版本的插件，旧的系统变量和状态变量可用，但新的不可用。

    插件库文件的文件名后缀因平台而异（例如，`。所以`对于 Unix 和类 Unix 系统，以及`.dll`对于 Windows）。插件和库文件名如下：

-   源服务器，旧术语：`rpl_semi_sync_master`插入 （`semisync_master.so`要么`semisync_master.dll`图书馆）

-   源服务器，新术语（来自 MySQL 8.0.26）：`rpl_semi_sync_source`插入 （`semisync_source.so`要么`semisync_source.dll`图书馆）

-   副本，旧术语：`rpl_semi_sync_slave`插入 （`semisync_slave.so`要么`semisync_slave.dll`图书馆）

-   副本，新术语（来自 MySQL 8.0.26）：`rpl_semi_sync_replica`插入 （`semisync_replica.so`要么`semisync_replica.dll`图书馆）

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

    要设置半同步复制，请使用以下说明。这[`安装插件`](install-plugin.html),[`设置全球`](set-variable.html),[`停止复制`](stop-replica.html)， 和[`开始复制`](start-replica.html)这里提到的语句需要[`REPLICATION_SLAVE_ADMIN`](privileges-provided.html#priv_replication-slave-admin)特权（或已弃用的[`极好的`](privileges-provided.html#priv_super)特权）。

    要加载插件，请使用[`安装插件`](install-plugin.html)在源和每个要半同步的副本上声明，调整`。所以`根据需要为您的平台添加后缀。

    来源：


```
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

Or from MySQL 8.0.26:
INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
```

在每个副本上：

```
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

Or from MySQL 8.0.26:
INSTALL PLUGIN rpl_semi_sync_replica SONAME 'semisync_replica.so';
```

如果尝试安装插件导致 Linux 上出现类似于此处所示的错误，则必须安装`libimf`：

```
mysql> INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
ERROR 1126 (HY000): Can't open shared library
'/usr/local/mysql/lib/plugin/semisync_source.so'
(errno: 22 libimf.so: cannot open shared object file:
No such file or directory)
```

您可以获得`libimf`从<https://dev.mysql.com/downloads/os-linux.html>.

要验证插件安装，请检查[`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 '%semi%';
+----------------------+---------------+
| PLUGIN_NAME          | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_source | ACTIVE        |
+----------------------+---------------+
```

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

安装半同步复制插件后，默认禁用。必须在源端和副本端都启用插件才能启用半同步复制。如果仅启用一侧，则复制是异步的。要启用插件，请在运行时使用设置适当的系统变量[`设置全球`](set-variable.html)，或在命令行或选项文件中的服务器启动时。例如：

```
On the source:
SET GLOBAL rpl_semi_sync_master_enabled = 1;

Or from MySQL 8.0.26 with the rpl_semi_sync_source plugin:
SET GLOBAL rpl_semi_sync_source_enabled = 1;
```

```
On each replica:
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

Or from MySQL 8.0.26 with the rpl_semi_sync_replica plugin:
SET GLOBAL rpl_semi_sync_replica_enabled = 1;
```

如果在运行时在副本上启用半同步复制，则还必须启动复制 I/O（接收器）线程（如果它已经在运行，则首先停止它）以使副本连接到源并注册为半同步副本：

```
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

Or from MySQL 8.0.22:
STOP REPLICA IO_THREAD;
START REPLICA IO_THREAD;
```

如果复制 I/O（接收器）线程已经在运行并且您没有重新启动它，则副本将继续使用异步复制。

选项文件中列出的设置在每次服务器启动时生效。例如，您可以将变量设置为`我的.cnf`源服务器和副本服务器上的文件如下：

```
 On the source:

[mysqld]
rpl_semi_sync_master_enabled=1

Or from MySQL 8.0.26 with the rpl_semi_sync_source plugin:
rpl_semi_sync_source_enabled=1
```

```
 On each replica:

[mysqld]
rpl_semi_sync_slave_enabled=1

Or from MySQL 8.0.26 with the rpl_semi_sync_source plugin:
rpl_semi_sync_replica_enabled=1
```

您可以使用安装插件时可用的系统变量来配置半同步复制插件的行为。有关关键系统变量的信息，请参阅[第 17.4.10.2 节，“配置半同步复制”](replication-semisync-interface.html).
