主从复制中binlog的三个问题

问题一:
mysql binlog是在commit之后生成还是在commit之前就生成了? 在什么时候刷新到磁盘中?
 
问题二:
主从复制中,从库的binlog 什么时候从主库中获取到, 是在主库的缓存里面读取,还是等刷到磁盘之后,从主的本地文件读取。
 
问题三:
主从复制中,binlog数据 是主库 主动推送给从的,还是从库主动去请求,拉取的。
 
已邀请:

wubx - 专注MySQL及架构设计

赞同来自: kaixinguo8115 zs hnie2010

这三问题,相当于有技术含量。 我这里列出来我的认识参考一下:
问题1:
binlog 在commiting这个过程生成,在生成时得到binlog filename, binlog position,这个两个值会写入redo中,commit 完成。 这块也是一个XA事务的实现。
什么时间刷盘由:sync_binlog 这个参数决定。可以参考官方手册。
 
问题2:
​两种情况都。 一种:可以从OS级别的Cache中读取,这种是实时同步的。另一种: 同步的日志是几天前或是几个小时前的。
 
问题3:
结合问题2来思路问题3, 简单的可以说是io_thread拉取的。 
 
 

hnie2010 - 80后老男人!

赞同来自:

传统复制:主从复制binlog推送方式1、主动推送(时时写的binlog,有更新唤醒io线程来拉数据)、2、io线程拉取(备份的数据恢复搭建的从库,数据滞后主库很多,搭建主从时主库binglog已经写入磁盘,不在内存,需要主动去拉取)
我吴老师课上做的笔记!
 

要回复问题请先登录注册