16.3.9.2 半同步复制的安装和配置
半同步复制是使用插件实现的,因此必须将插件安装到服务器中才能使用它们。安装插件后,您可以通过与其关联的系统变量来控制它。在安装了相关的插件之前,这些系统变量不可用。
本节介绍如何安装半同步复制插件。有关安装插件的一般信息,请参见第 5.5.1 节“安装和卸载插件”。
要使用半同步复制,必须满足以下要求:
-
安装插件的能力需要支持动态加载的 MySQL 服务器。要验证这一点,请检查have_dynamic_loading系统变量的值为
YES
。二进制发行版应支持动态加载。 -
复制必须已经可以进行,请参阅第 16.1 节“配置复制”。
-
不得配置多个复制通道。半同步复制仅与默认复制通道兼容。参见第 16.2.3 节“复制通道”。
要设置半同步复制,请使用以下说明。此处提到的INSTALL PLUGIN,SET GLOBAL,STOP SLAVE和START SLAVE语句需要SUPER特权。
MySQL 发行版包括用于源端和副本端的半同步复制插件文件。
要由源服务器或副本服务器使用,相应的插件库文件必须位于 MySQL 插件目录(由plugin_dir系统变量命名的目录)中。如有必要,通过在服务器启动时设置plugin_dir的值来配置插件目录位置。
插件库文件的基本名称为semisync_master
和semisync_slave
。文件名后缀因平台而异(例如,对于 Unix 和类 Unix 系统,为.so
;对于 Windows,为.dll
)。
源插件库文件必须存在于源服务器的插件目录中。副本插件库文件必须存在于每个副本服务器的插件目录中。
要加载插件,请在源和每个要半同步的副本上使用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)
您可以从https://dev.mysql.com/downloads/os-linux.html获得libimf
。
要查看安装了哪些插件,请使用SHOW PLUGINS语句,或查询INFORMATION_SCHEMA.PLUGINStable。
要验证插件安装,请检查INFORMATION_SCHEMA.PLUGINStable 或使用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_enabled或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 线程已经在运行,并且您没有重新启动它,则副本将 continue 使用异步复制。
服务器启动时,可以将控制半同步复制的变量设置为命令行选项或在选项文件中。服务器每次启动时,选项文件中列出的设置都会生效。例如,您可以按如下所示在源端和副本端的my.cnf
文件中设置变量。
在源上:
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second
在每个副本上:
[mysqld]
rpl_semi_sync_slave_enabled=1