3.10.2配置Semisynchronous复制

当你为semisynchronous复制安装源和复制插件(请参阅3.10.1节,“安装Semisynchronous复制”),系统变量可用来控制插件的行为。

检查状态变量的当前值semisynchronous复制、使用显示变量:

mysql >显示变量如“rpl_semi_sync %”;

从MySQL 8.0.26,源和复制插件提供的新版本,而取代奴隶副本在系统变量和状态变量。如果你安装新的rpl_semi_sync_sourcerpl_semi_sync_replica插件,新系统变量和状态变量是可用的,但旧的不是。如果你安装旧的rpl_semi_sync_masterrpl_semi_sync_slave插件,旧的系统变量和状态变量但新的并不可用。你不能有新和旧版本相关的插件安装在一个实例。

所有的rpl_semi_sync_xxx描述系统变量2.6.2节”,复制源选择和变量”2.6.3部分,“副本服务器选项和变量”。一些关键的系统变量:

rpl_semi_sync_source_enabledrpl_semi_sync_master_enabled

控制是否semisynchronous复制源服务器上启用。启用或禁用插件,分别将这个变量设置为1或0。默认值为0(关闭)。

rpl_semi_sync_replica_enabledrpl_semi_sync_slave_enabled

控制是否启用semisynchronous复制副本。

rpl_semi_sync_source_timeoutrpl_semi_sync_master_timeout

值以毫秒为单位控制源在提交等待多久承认从一个副本之前超时和恢复到异步复制。默认值为10000(10秒)。

rpl_semi_sync_source_wait_for_replica_countrpl_semi_sync_master_wait_for_slave_count

控制每个事务的副本确认源必须接受数然后返回会话。默认是1,这意味着源只等待一个副本收到事务的事件。

rpl_semi_sync_source_wait_pointrpl_semi_sync_master_wait_point系统变量控制在哪个点semisynchronous源服务器等待副本承认交易收据返回一个状态给客户端之前,提交事务。这些值是允许的:

  • AFTER_SYNC(默认):源将每个事务写入二进制日志和复制品,和同步二进制日志到磁盘。源等待副本承认交易收据后同步。收到确认,提交事务存储引擎,将结果返回给客户端,然后才能进行。

  • AFTER_COMMIT:源将每个事务写入二进制日志和复制品,同步二进制日志,并提交事务存储引擎。源等待副本承认交易收据后提交。一旦收到确认,源返回结果给客户端,然后才能进行。

这些设置不同的复制特点如下:

  • AFTER_SYNC,所有客户看到提交的事务的同时,承认后的副本和源致力于存储引擎。因此,所有客户看到相同的数据来源。

    在源出现故障时,所有交易承诺在源已经复制到副本(保存到它的中继日志)。源和故障转移的意外退出副本是无损的,因为是最新的复制品。如上所述,来源不应该被重用在故障转移之后。

  • AFTER_COMMIT,客户端发出事务服务器返回状态后才提交到存储引擎和接收副本承认。提交后在副本承认之前,其他客户可以看到提交的事务提交之前的客户。

    如果出现错误,复制不处理事务,然后在一个意想不到的来源退出副本和故障转移,这样的客户有可能看到一个损失数据相对于他们所看到的来源。

从MySQL 8.0.23,您可以提高semisynchronous复制的性能通过启用系统变量replication_sender_observe_commit_only,这限制了回调replication_optimize_for_static_plugin_config增加共享锁锁,避免不必要的收购。这些设置帮助副本数量的增加,因为争用的锁可以减缓性能。Semisynchronous复制源服务器也可以获得性能优势使这些系统变量,因为它们使用相同的锁定机制的副本。