MySQL半同步复制--transmit_stop
来源:互联网 发布:网络惊魂 电影 2016 编辑:程序博客网 时间:2024/06/05 09:42
函数调用
mysql_binlog_send->(void) RUN_HOOK(binlog_transmit, transmit_stop, (thd, flags))->
repl_semi_binlog_dump_end
代码分析
int repl_semi_binlog_dump_end(Binlog_transmit_param *param){ //至少有一个slave开启了半同步 bool semi_sync_slave= repl_semisync.is_semi_sync_slave(); if (semi_sync_slave) { /* One less semi-sync slave */ repl_semisync.remove_slave(); } return 0;}
void ReplSemiSyncMaster::remove_slave(){ //锁内减一 lock(); rpl_semi_sync_master_clients--; /* master开启着半同步,并且半同步复制状态正常 */ if (getMasterEnabled() && is_on()) { //如果(不需要再开启半同步 或者server down掉)&&没有master事务正处于等待,则将半同步关闭 if (rpl_semi_sync_master_clients == 0 && (!rpl_semi_sync_master_wait_no_slave || abort_loop)) { switch_off(); } } unlock();}注:
rpl_semi_sync_master_wait_no_slave:默认是on。表示每个事务都必须等待超时时间。默认打开,表示当备库起来后,
并跟上主库时,自动切换到半同步模式,如果关闭,即使备库起来并跟上了,也不会启用半同步;
rpl_semi_sync_master_wait_for_slave_count:master继续处理事务必须等待slave ACK的个数。
总结
1、该函数在主库向slave发送binlog结束之后。
2、在LOCK_binlog_锁内进行操作。首先将rpl_semi_sync_master_clients减一
3、如果(不需要再开启半同步 或者server down掉)&&没有master事务正处于等待,则将半同步关闭
阅读全文
0 0
- MySQL半同步复制--transmit_stop
- MySQL半同步复制
- mysql半同步复制
- MySQL半同步复制
- MySQL半同步复制
- MySql-半同步复制
- MySQL半同步复制
- MySQL半同步复制
- MySQL半同步复制
- mysql半同步复制
- MySQL半同步复制
- MySQL半同步复制
- mysql半同步复制
- MySQL复制之半同步复制
- MySQL的主从复制,半同步复制
- MySQL复制之半同步复制
- mysql半同步复制<一>
- mysql半同步复制<二>
- 数据结构实验之查找一:二叉排序树
- mybatis复杂应用的简单实例
- Java基础知识缩写大全
- C与C++的文件操作
- Django框架学习笔记(30.组合搜索组件源码)
- MySQL半同步复制--transmit_stop
- websocket
- android四大组件-Activity
- HDU2896
- 每天一个linux命令(1):ls命令
- Eclipse安装Activiti Designer插件及所遇问题解决
- toString() 和 (String) 以及 valueOf() 三者的对照关系[java]
- pox中的标签含义
- Linux web server只能在本机访问,不能被外部主机访问