MySQL高可用实践
上QQ阅读APP看书,第一时间看更新

2.6 测 试

2.6.1 正常提交事务

MySQL 8默认是每条语句自动提交。主库等待3个事务的确认,分别对应create database、create table、insert语句,平均每个事务等待确认的时长为758微秒。从库正常确认了3个事务。

2.6.2 回滚事务

从上面的测试可以得出以下结论:

  • set session autocommit=0语句不被复制。
  • DDL语句会触发一个commit,自动提交DDL语句本身及其之前所有未提交的事务。
  • 非事务表不能回滚。
  • Rpl_semi_sync_master_tx_waits和Rpl_semi_sync_master_yes_tx都增加了3,分别对应的3个事务为:insert into t1 values(2)、create table t2 (a int) engine=myisam、insert into t2 values(3)。

2.6.3 rpl_semi_sync_master_wait_no_slave与从库数量

(1)rpl_semi_sync_master_wait_no_slave为ON时从库数小于rpl_semi_sync_master_wait_for_slave_count

可以看到,主库提交后等待了10秒(rpl_semi_sync_master_timeout的默认值)才完成,而且此时主库已经降级为异步复制。

当Rpl_semi_sync_master_clients大于等于rpl_semi_sync_master_wait_for_slave_count时,主库立即恢复为半同步复制,并发送那些未被复制的binlog。

(2)rpl_semi_sync_master_wait_no_slave为OFF时,从库数小于rpl_semi_sync_master_wait_for_slave_count。

可以看到,当rpl_semi_sync_master_wait_no_slave设置为OFF时,一旦Rpl_semi_sync_master_clients小于rpl_semi_sync_master_wait_for_slave_count,Rpl_semi_sync_master_status立即变为OFF,即立即降为异步复制。