这篇译文是笔者借助翻译软件修改而来,难免会有不恰当的地方,还请各位读者多多包含,希望本篇文章能为开源社区做出一点小小的贡献。
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语句需要超级特权。
MySQL发行版包括主端和从端的半同步复制插件文件。
要使主服务器或从服务器可用,必须在mysql plugin目录(plugin_dir系统变量命名的目录)中找到相应的插件库文件。如有必要,通过在服务器启动时设置plugin_dir的值来配置插件目录位置。
插件库文件的基本名称是半同步主文件和半同步从文件。每个平台的文件名后缀不同(例如,.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)
可以从https://dev.mysql.com/downloads/os-linux.html 获取libifm
要查看安装了哪些插件,请使用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_enabled
或rpl_semi_sync_slave_enabled
对于 rpl_semi_sync_master_timeout,N的单位是毫秒,默认值为10000(10秒)
如果在运行时在从系统上启用半同步复制,则还必须启动从系统I/O线程(如果已在运行,则先停止该线程)以使从系统连接到主系统并注册为半同步从系统:
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
如果I/O线程已经在运行,而您没有重新启动它,那么从机将继续使用异步复制。
在服务器启动时,控制半同步复制的变量可以设置为命令行选项或在选项文件中。选项文件中列出的设置在每次服务器启动时生效。例如,您可以在master和slave端的my.cnf文件中设置变量,如下所示。
在主库端:
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second
在从库端:
[mysqld]
rpl_semi_sync_slave_enabled=1
16.3.9.3半同步复制监控
半同步复制功能的插件公开了几个系统和状态变量,您可以检查这些变量以确定其配置和操作状态。
系统变量反映如何配置半同步复制。要检查其值,请使用显示变量:
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
状态变量使您能够监视半同步复制的操作。要检查其值,请使用显示状态:
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
当主服务器由于提交阻塞超时或从服务器捕获而在异步或半同步复制之间切换时,它会适当地设置Rpl_semi_sync_master_status的值,在主服务器上从半同步到异步复制的自动回退意味着rpl_semi_sync_master_enabled的系统变量在主服务器端可能有1的值,即使半同步复制目前实际上不可操作。您可以监视Rpl_semi_sync_master_status以确定master当前使用的是异步复制还是半同步复制。
要查看连接了多少个半同步从机,请检查rpl_semi_sync_master_clients。
从系统成功或失败确认的提交数由rpl_semi-sync_master_yes_tx和rpl_semi-sync_master_no_tx变量表示。
在slave端,rpl_semi_sync_slave_status 表示半同步复制当前是否可操作。