当您安装用于半同步复制的源和副本插件时(参见 第 19.4.10.1 节,“安装半同步复制”),系统变量可用以控制插件的行为。
要检查半同步复制的状态变量的当前值,请使用 SHOW VARIABLES
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
所有 rpl_semi_sync_
系统变量在 第 19.1.6.2 节,“复制源选项和变量” 和 第 19.1.6.3 节,“副本服务器选项和变量” 中描述。一些关键的系统变量是xxx
-
rpl_semi_sync_source_enabled
控制源服务器上是否启用半同步复制。要启用或禁用插件,请将此变量分别设置为 1 或 0。默认值为 0(关闭)。
-
rpl_semi_sync_replica_enabled
控制副本上是否启用半同步复制。
-
rpl_semi_sync_source_timeout
以毫秒为单位的值,控制源在提交之前等待副本确认的时间,如果超时,则恢复为异步复制。默认值为 10000(10 秒)。
-
rpl_semi_sync_source_wait_for_replica_count
控制源在每个事务提交之前必须接收的副本确认数量。默认值为 1,这意味着源只等待一个副本确认收到事务的事件。
rpl_semi_sync_source_wait_point
系统变量控制半同步源服务器在返回已提交事务的状态给客户端之前等待副本确认收到事务的时间点。允许这些值
AFTER_SYNC
(默认值):源将每个事务写入其二进制日志和副本,并将二进制日志同步到磁盘。源在同步后等待副本确认收到事务。在收到确认后,源将事务提交到存储引擎并向客户端返回结果,然后客户端可以继续执行。AFTER_COMMIT
:源将每个事务写入其二进制日志和副本,同步二进制日志并将事务提交到存储引擎。源在提交后等待副本确认收到事务。在收到确认后,源向客户端返回结果,然后客户端可以继续执行。
这些设置的复制特征如下不同
使用
AFTER_SYNC
,所有客户端在同一时间看到已提交的事务,这在副本确认收到事务并将事务提交到源上的存储引擎之后。因此,所有客户端在源上看到相同的数据。在源发生故障的情况下,所有在源上提交的事务都已复制到副本(保存到其中继日志)。源的意外退出以及到副本的故障转移是无损的,因为副本是最新的。如上所述,源在故障转移后不应被重新使用。
使用
AFTER_COMMIT
,发出事务的客户端只有在服务器提交到存储引擎并收到副本确认后才会收到返回状态。在提交后和收到副本确认之前,其他客户端可以在提交客户端看到已提交的事务。如果由于某种原因副本无法处理事务,那么在意外源退出并故障转移到副本的情况下,这些客户端可能会看到相对于他们在源上看到的数据丢失。
可以通过启用系统变量 replication_sender_observe_commit_only
(限制回调)和 replication_optimize_for_static_plugin_config
(添加共享锁并避免不必要的锁获取)来提高半同步复制的性能。随着副本数量的增加,这些设置会有所帮助,因为锁争用会降低性能。半同步复制源服务器也可以从启用这些系统变量中获得性能优势,因为它们使用与副本相同的锁定机制。