当您安装半同步复制的源和副本插件时(请参见 第 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
,该变量添加共享锁并避免不必要的锁获取。随着副本数量的增加,这些设置会有所帮助,因为锁争用会降低性能。半同步复制源服务器也可以从启用这些系统变量中获得性能提升,因为它们使用与副本相同的锁定机制。