半同步复制是使用插件实现的,必须在源和副本上安装这些插件,才能在实例上使用半同步复制。源和副本的插件有所不同。安装插件后,您可以通过与之关联的系统变量来控制它。只有在安装了关联的插件后,这些系统变量才可用。
本节介绍如何安装半同步复制插件。有关安装插件的一般信息,请参见 第 7.6.1 节,“安装和卸载插件”.
要使用半同步复制,必须满足以下要求
安装插件的功能需要支持动态加载的 MySQL 服务器。要验证这一点,请检查
have_dynamic_loading
系统变量的值是否为YES
。二进制发行版应支持动态加载。复制必须已经正常工作,请参见 第 19.1 节,“配置复制”.
不能配置多个复制通道。半同步复制仅与默认复制通道兼容。请参见 第 19.2.2 节,“复制通道”.
插件库文件的名称后缀因平台而异(例如,Unix 和类 Unix 系统为 .so
,Windows 为 .dll
)。插件和库文件的名称如下
源服务器:
rpl_semi_sync_source
插件(semisync_source.so
或semisync_source.dll
库)副本:
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_source SONAME 'semisync_source.so';
在每个副本上
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)
您可以从 https://dev.mysqlserver.cn/downloads/os-linux.html 获取 libimf
。
要验证插件安装,请检查 Information Schema PLUGINS
表或使用 SHOW PLUGINS
语句(参见 第 7.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
在运行时设置适当的系统变量,或在命令行或选项文件中设置服务器启动时的变量。例如
SET GLOBAL rpl_semi_sync_source_enabled = 1;
SET GLOBAL rpl_semi_sync_replica_enabled = 1;
如果在运行时在副本上启用半同步复制,则还必须启动复制 I/O(接收器)线程(如果它已经在运行,则先停止它)以使副本连接到源并注册为半同步副本
STOP REPLICA IO_THREAD;
START REPLICA IO_THREAD;
如果复制 I/O(接收器)线程已经在运行,并且您没有重新启动它,则副本将继续使用异步复制。
选项文件中列出的设置在每次服务器启动时生效。例如,您可以在源服务器和副本服务器上的 my.cnf
文件中设置以下变量。在源服务器上
[mysqld]
rpl_semi_sync_source_enabled=1
在每个副本上
[mysqld]
rpl_semi_sync_replica_enabled=1
您可以使用安装插件后可用的系统变量来配置半同步复制插件的行为。有关关键系统变量的信息,请参见 第 19.4.10.2 节,“配置半同步复制”。