Documentation Home
MySQL 8.0 参考手册  / 第十七章复制  / 17.4 复制解决方案  / 17.4.10 半同步复制  /  17.3.9.2 半同步复制安装和配置

17.3.9.2 半同步复制安装和配置

半同步复制是使用插件实现的,因此必须将插件安装到服务器中才能使用。安装插件后,您可以通过与其关联的系统变量来控制它。在安装相关插件之前,这些系统变量不可用。

本节介绍如何安装半同步复制插件。有关安装插件的一般信息,请参阅第 5.5.1 节,“安装和卸载插件”

要使用半同步复制,必须满足以下要求:

  • 安装插件的能力需要一个支持动态加载的MySQL服务器。要验证这一点,请检查 have_dynamic_loading系统变量的值是否为YES。二进制发行版应该支持动态加载。

  • 复制必须已经在工作,请参阅 第 17.1 节,“复制配置”

要设置半同步复制,请使用以下说明。此处提到的INSTALL PLUGINSET GLOBALSTOP SLAVESTART SLAVE语句需要SUPER权限。

MySQL 发行版包括源端和副本端的半同步复制插件文件。

要由源服务器或副本服务器使用,适当的插件库文件必须位于 MySQL 插件目录(由 plugin_dir系统变量命名的目录)中。plugin_dir如有必要,通过在服务器启动时 设置值来配置插件目录位置。

插件库文件的基本名称是 semisync_mastersemisync_slave. 文件名后缀因平台而异(例如,.so对于 Unix 和类 Unix 系统,.dll对于 Windows)。

源插件库文件必须存在于源服务器的插件目录中。副本插件库文件必须存在于每个副本服务器的插件目录中。

要加载插件,请INSTALL PLUGIN在源和要半同步的每个副本上使用该语句,并根据需要调整 .so平台的后缀。

关于来源:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

在每个副本上:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

如果尝试在 Linux 上安装插件导致类似于此处显示的错误,则必须安装 libimf

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

您可以libimfhttps://mysql.net.cn/downloads/os-linux.html获取。

要查看安装了哪些插件,请使用 SHOW PLUGINS语句或查询INFORMATION_SCHEMA.PLUGINS 表。

要验证插件安装,请检查 INFORMATION_SCHEMA.PLUGINS表格或使用SHOW PLUGINS语句(请参阅第 5.5.2 节,“获取服务器插件信息”)。例如:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME          | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
+----------------------+---------------+

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

安装半同步复制插件后,默认情况下它是禁用的。必须在源端和副本端启用插件才能启用半同步复制。如果仅启用一侧,则复制是异步的。

要控制是否启用已安装的插件,请设置适当的系统变量。SET GLOBAL您可以在运行时使用或在服务器启动时在命令行或选项文件 中设置这些变量。

在运行时,这些源端系统变量可用:

SET GLOBAL rpl_semi_sync_master_enabled = {0|1};
SET GLOBAL rpl_semi_sync_master_timeout = N;

在副本端,此系统变量可用:

SET GLOBAL rpl_semi_sync_slave_enabled = {0|1};

对于 rpl_semi_sync_master_enabledor rpl_semi_sync_slave_enabled,该值应为 1 以启用半同步复制或 0 以禁用它。默认情况下,这些变量设置为 0。

对于 rpl_semi_sync_master_timeout,值N以毫秒为单位给出。默认值为 10000(10 秒)。

如果在运行时在副本上启用半同步复制,则还必须启动复制 I/O 线程(如果它已经在运行,请先停止它)以使副本连接到源并注册为半同步副本:

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

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

在服务器启动时,可以将控制半同步复制的变量设置为命令行选项或在选项文件中。每次服务器启动时,选项文件中列出的设置都会生效。例如,您可以在 my.cnf源端和副本端的文件中设置变量,如下所示。

关于来源:

[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second

在每个副本上:

[mysqld]
rpl_semi_sync_slave_enabled=1