- MySQL高可用实践
- 王雪迎
- 336字
- 2025-02-18 08:35:00
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,即立即降为异步复制。