19.4.10.1 安装半同步复制
半同步复制使用插件实现,插件必须在源服务器和副本服务器上安装,以使半同步复制在实例上可用。有不同的插件用于源服务器和副本服务器。安装插件后,您可以通过相关插件的系统变量来控制它。这些系统变量只有在相关插件安装后可用。
本节描述了如何安装半同步复制插件。关于安装插件的常规信息,请见第7.6.1节,“安装和卸载插件”。
要使用半同步复制,必须满足以下要求:
-
安装插件的能力需要支持动态加载的MySQL服务器。要验证此项,请检查
have_dynamic_loading
系统变量的值是否为YES
。二进制发行版通常支持动态加载。 -
复制必须已经工作,请见第19.1节,“配置复制”。
-
不能配置多个复制通道。半同步复制只能与默认复制通道兼容。请见第19.2.2节,“复制通道”。
插件库文件的文件名后缀根据平台不同(例如,.so
用于Unix和Unix-like系统,.dll
用于Windows)。插件和库文件名如下:
-
源服务器:
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.mysql.com/downloads/os-linux.html获取libimf
。
要验证插件安装,请检查信息架构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节,“半同步复制配置”。