安装插件
master:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
slave
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
如果报错,则需要安装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
查看状态
#master
show status like 'Rpl_semi_sync_master_status';
#slave
show status like 'Rpl_semi_sync_slave_status';
相关参数
rpl_semi_sync_master_enabled
控制是否在主服务器上启用半同步复制。要启用或禁用插件,请将此变量分别设置为 ON 或 OFF (或1或0),0为OFF,默认为0.
rpl_semi_sync_master_timeout
一个以毫秒为单位的值,用于控制主机在超时并恢复到异步复制之前等待提交来自从机的确认的时间。默认值为10000(10秒)
rpl_semi_sync_master_trace_level
主服务器上的半同步复制调试跟踪级别。定义了四个级别:
1 =一般级别(例如,时间函数失败)
16 =详细程度(更详细的信息)
32 =净等待级别(有关网络等待的更多信息)
64 =功能级别(有关功能进入和退出的信息)
rpl_semi_sync_master_wait_for_slave_count
主服务器必须在继续之前必须接收的从服务确认数,默认为1
注意此行为还取决于rpl_semi_sync_master_wait_no_slave
仅当安装了主端半同步复制插件时,此变量才可用。
rpl_semi_sync_master_wait_no_slave
控制主机是否等待 rpl_semi_sync_master_timeout 配置的超时时间到期,即使从机计数降至小于超时期间 rpl_semi_sync_master_wait_for_slave_count 配置的从机数量。
当 rpl_semi_sync_master_wait_no_slave 的值为 ON (默认值)时,允许从站计数在超时期间降至小于 rpl_semi_sync_master_wait_for_slave_count 。只要有足够的从服务器在超时期限到期之前确认事务,就会继续进行半同步复制。
当 rpl_semi_sync_master_wait_no_slave 的值为 OFF 时,如果从属计数在 rpl_semi_sync_master_timeout 配置的超时时间段内随时下降到小于 rpl_semi_sync_master_wait_for_slave_count 中配置的数量,则主服务器将恢复为正常复制。
仅当安装了主端半同步复制插件时,此变量才可用。
rpl_semi_sync_master_wait_point
此变量控制半同步复制主机在将状态返回到提交事务的客户机之前等待事务接收的从机确认的点。允许这些值:
AFTER_SYNC (默认值):主服务器将每个事务写入其二进制日志和从服务器,并将二进制日志同步到磁盘。主机在同步后等待从机确认事务接收。收到确认后,主服务器将事务提交给存储引擎并将结果返回给客户端,然后客户端可以继续。
AFTER_COMMIT :主服务器将每个事务写入其二进制日志和从服务器,同步二进制日志,并将事务提交到存储引擎。提交后,主设备等待事务接收的从设备确认。收到确认后,主服务器将结果返回给客户端,然后客户端可以继续。
该这些设置的复制特征如下:
使用 AFTER_SYNC ,所有客户端同时看到已提交的事务:从服务器确认并提交到主服务器上的存储引擎之后。因此,所有客户端都在主服务器上看到相同的数据。
如果主站发生故障,则在主站上提交的所有事务都已复制到从站(保存到其中继日志)。主服务器和故障转移到从服务器的崩溃是无损的,因为从服务器是最新的。但请注意,在此方案中无法重新启动主服务器并且必须将其丢弃,因为其二进制日志可能包含未提交的事务,这些事务会在二进制日志恢复后外部化时导致与从服务器冲突。
使用 AFTER_COMMIT ,发出事务的客户端仅在服务器提交到存储引擎并接收从属确认后才会获得返回状态。在提交之后和从属确认之前,其他客户端可以在提交客户端之前查看已提交的事务。
如果出现问题导致从设备不处理事务,那么在主设备崩溃和故障转移到从设备的情况下,这些客户端可能会看到相对于他们在主设备上看到的数据丢失。
仅当安装了主端半同步复制插件时,此变量才可用。
在MySQL 5.7.2中添加了 rpl_semi_sync_master_wait_point
。对于旧版本,半同步主行为等同于 AFTER_COMMIT 的设置。