MySQL半同步(四)流程和相关参数

作者:八怪(高鹏)中亦科技数据库专家

源码版本5.7.29

本文作为新书《深入理解MySQL主从原理》的补充部分,供大家参考,如有误请见谅。


数据结构和流程参考:

  • MySQL:半同步(一)主库端初始化流程 https://www.jianshu.com/p/9437e9059697

  • MySQL:半同步(二)主库端回调函数 https://www.jianshu.com/p/d55d6383434d

  • MySQL:半同步(三)从库端初始化和回调函数 https://www.jianshu.com/p/9fecae89f82c

此处不再单独列出

一、半同步的总体流程图

查看大图请移步 https://www.jianshu.com/p/5ebf4f4c1cf8

二、半同步中几个重要的状态值(主库)

半同步插件是否注册:半同步插件注册状态

ReplSemiSyncMaster::init_done_                                                                                                                                                                                                                                                                                               
 /* True when initObject has been called */                                                                                                                                                                                                                                                                                  

半同步插件是否启用:半同步开启状态

ReplSemiSyncMaster::master_enabled_                                                                                                                                                                                                                                                                                          
/* semi-sync is enabled on the master */                                                                                                                                                                                                                                                                                     
getMasterEnabled用于获取变量                                                                                                                                                                                                                                                                                                 
set_master_enabled设置变量                                                                                                                                                                                                                                                                                                   

完全取决于参数rpl_semi_sync_master_enabled

是否使用半同步(异步):半同步复制方式

ReplSemiSyncMaster::state_                                                                                                                                                                                                                                                                                                   
/* whether semi-sync is switched */                                                                                                                                                                                                                                                                                          

本状态非常重要,决定了是否是半同步复制方式,在函数ReplSemiSyncMaster::commitTrx中会完全依赖这个状态决定是否进行用户线程事务的等待,也是Rpl_semi_sync_master_status信息的来源。

三、相关参数(主库)

研究的参数包括

| rpl_semi_sync_master_enabled              | ON         |                                                                                                                                                                                                                                                                   
| rpl_semi_sync_master_timeout              | 10000      |                                                                                                                                                                                                                                                                   
| rpl_semi_sync_master_trace_level          | 32         |                                                                                                                                                                                                                                                                   
| rpl_semi_sync_master_wait_for_slave_count | 1          |                                                                                                                                                                                                                                                                   
| rpl_semi_sync_master_wait_no_slave        | ON         |                                                                                                                                                                                                                                                                   
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |                                                                                                                                                                                                                                                                   
rpl_semi_sync_master_enabled

默认为false

生效点:

  • 插件初始化初始化生效,参考第一节初始化函数ReplSemiSyncMaster::initObject

  • Ack_receiver线程初始化生效,参考第一节初始化函数Ack_receiver::init

  • 参数动态生效,参考函数fix_rpl_semi_sync_master_enabled

fix_rpl_semi_sync_master_enabled函数会动态转换为半同步开启状态,并且开启Ack_receiver线程,当然根据参数rpl_semi_sync_master_wait_for_slave_countrpl_semi_sync_master_wait_no_slav

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值