MySQL半同步复制--master dump线程2
2017-10-22 16:29
645 查看
mysql_binlog_send: //是否在binlog index文件中能够找到指定的binlog文件名 if (mysql_bin_log.find_log_pos(&linfo, name, 1)) ... if ((file=open_binlog_file(&log, log_file_name, &errmsg)) < 0)//打开binlog文件 ... //初始化semi-sync if (RUN_HOOK(binlog_transmit, transmit_start,thd, flags, log_ident, pos, &observe_transmission))) ... while (!net->error && net->vio != 0 && !thd->killed){//进入while循环 //开始发送binlog之前需要重置packet(reset_transmit_packet) if (reset_transmit_packet(thd, flags, &ev_offset, &errmsg,observe_transmission)) //会调用RUN_HOOK(binlog_transmit, reserve_header, (thd, flags, packet))) while (!thd->killed && !(error= Log_event::read_log_event(&log, packet, log_lock, current_checksum_alg,log_file_name,&is_active_binlog))){ if (observe_transmission && RUN_HOOK(binlog_transmit, before_send_event,(thd, flags, packet, log_file_name, pos))) ... my_net_write(net, (uchar*) packet->ptr(), packet->length());//发送binlog if (skip_group == false && event_type == LOAD_EVENT){ send_file(thd);//通过TCP方式发送 } if (observe_transmission && RUN_HOOK(binlog_transmit, after_send_event,(thd, flags, packet, log_file_name, skip_group ? pos : 0))) ... }//end 一批 //等待master通知 ret= mysql_bin_log.wait_for_update_bin_log(thd, heartbeat_ts); if (goto_next_binlog){//打开下一个binlog end_io_cache(&log); mysql_file_close(file, MYF(MY_WME)); file=open_binlog_file(&log, log_file_name, &errmsg); ... } }//end while RUN_HOOK(binlog_transmit, transmit_stop, (thd, flags));//dump停止reset_transmit_packet(thd, flags, &ev_offset, &errmsg,observe_transmission)
1)observe_transmission初始为FALSE,如果是半同步,在transmit_start函数中会置成TRUE
2)repl_semisync.reserveSyncHeader(header, size)->repl_semi_reserve_header
用于在packet的头部预留字节,以维护和slave的交互信息,目前预留3字节
ReplSemiSyncBase:kSyncHeader[2],这里为在packet头部拷贝2字节,
固定值作为MAGIC NUMBER,只有slave开启semisync才会保留额外的
packet头部比特位,不管master是否开启了semisync
const unsigned char ReplSemiSyncBase::kPacketMagicNum = 0xef;
const unsigned char ReplSemiSyncBase::kSyncHeader[2] ={ReplSemiSyncBase::kPacketMagicNum, 0};
相关文章推荐
- MySQL半同步复制--master dump线程1
- MySQL半同步复制-答疑解惑-master dump线程等待slave的ACK是死等吗
- mysql同步复制M-M(master master)模式
- mysql同步复制M-M(master master)模式
- MySQL主从复制(Master-Slave),半同步复制与读写分离(MySQL-Proxy)
- mysql同步复制报Slave can not handle replication events with the checksum that master 错误
- mysql同步复制M-M(master master)模式
- MySQL半同步复制--handle_slave_io线程--1
- MySQL半同步复制--handle_slave_io等待master发送event
- MySQL半同步复制--handle_slave_io线程--2
- mysql同步复制报Slave can not handle replication events with the checksum that master 错误
- mysql主备复制I/O线程不能同步问题
- mysql 主从master-slave同步复制 配置,为读写分离准备
- MySQL5.6 数据库主从(Master/Slave)同步安装与配置详解
- MySQL半同步复制的安装和配置
- MySQL Replication/Synchronization (双机热备/同步复制)
- mysql半同步复制
- MySQL半同步复制
- mysql(master/slave)主从复制原理及配置图文详解
- mysql5.5 建立主从复制 ( set up master-slave replication )