半同步复制是使用插件实现的,必须在源和副本上安装插件才能在实例上进行半同步复制。源和副本有不同的插件。安装插件后,您可以通过与其关联的系统变量来控制它。这些系统变量只有在安装了相关插件后才可用。
本节介绍如何安装半同步复制插件。有关安装插件的一般信息,请参阅第 5.6.1 节,“安装和卸载插件”。
要使用半同步复制,必须满足以下要求:
安装插件的能力需要一个支持动态加载的MySQL服务器。要验证这一点,请检查
have_dynamic_loading
系统变量的值是否为YES
。二进制发行版应该支持动态加载。复制必须已经在工作,请参阅 第 17.1 节,“配置复制”。
不得配置多个复制通道。半同步复制仅与默认复制通道兼容。请参阅 第 17.2.2 节,“复制通道”。
从 MySQL 8.0.26 开始,提供了实现半同步复制的新版本插件,一个用于源服务器,一个用于副本服务器。新插件将术语 “ master ”和“ slave ”替换 为“ source ”和“ replica ”在系统变量和状态变量中,您可以安装这些版本而不是旧版本。您不能在一个实例上同时安装新旧版本的相关插件。如果你使用新版本的插件,新的系统变量和状态变量可用,旧的不可用。如果您使用旧版本的插件,旧的系统变量和状态变量可用,但新的不可用。
插件库文件的文件名后缀因平台而异(例如,.so
对于 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 插件目录(由
plugin_dir
系统变量命名的目录)中。plugin_dir
如有必要,通过在服务器启动时设置值来配置插件目录位置。源插件库文件必须存在于源服务器的插件目录中。副本插件库文件必须存在于每个副本服务器的插件目录中。
要设置半同步复制,请使用以下说明。此处提到的INSTALL PLUGIN
、
SET
GLOBAL
、
STOP
REPLICA
和
START
REPLICA
语句需要
REPLICATION_SLAVE_ADMIN
特权(或已弃用的SUPER
特权)。
要加载插件,请INSTALL
PLUGIN
在源和要半同步的每个副本上使用该语句,并根据需要调整
.so
平台的后缀。
关于来源:
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://mysql.net.cn/downloads/os-linux.html获取。
要验证插件安装,请检查
INFORMATION_SCHEMA.PLUGINS
表格或使用SHOW PLUGINS
语句(请参阅第 5.6.2 节,“获取服务器插件信息”)。例如:
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
GLOBAL
,或者在服务器启动时在命令行或选项文件中设置。例如:
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(接收方)线程已经在运行并且您没有重新启动它,副本将继续使用异步复制。
每次服务器启动时,选项文件中列出的设置都会生效。例如,您可以在
my.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 节,“配置半同步复制”。