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