mysql的io和sql两个线程作用_mysql复制原理/基于库的多线程复制原理/基于BLGC的多线程复制原理...

本文详细介绍了MySQL的复制原理,包括单线程主从复制、基于库的多线程复制以及基于BLGC的多线程复制。在多线程复制中,讨论了如何通过last_committed和sequence_number保证事务的并行性和顺序一致性,并探讨了并行复制可能遇到的问题及解决方案。
摘要由CSDN通过智能技术生成

mysql复制原理/基于库的多线程复制原理/基于BLGC的多线程复制原理

单线程主从复制:

从库向主库请求binlog,并将binlog转存到自己的relaylog中,从库重做binlog里面的sql,

主要由以下三个线程完成.

dump thread: 在主库上,发送binlog

io thread: 在slave上,接收,转存,请求binlog

sql thread :在slave 上,重做binlog

基于库的多线程复制原理:

从库向主库请求binlog,并将binlog转存到自己的relaylog中,从库重做binlog里面的sql,

主要由以下三个线程完成.

dump thread: 在主库上,发送binlog

io thread: 在slave上,接收,转存,请求binlog

sql thread :在slave 上,读取binlog,并分配binlog给work thread (分配原则,判断并行执行的事务是否拥有相同的数据库)

work thread:执行binlog ,可以有多个

多线程复制

mysql5.7 基于BLGC的多线程复制原理,同时处于prepare阶段的事务不会有冲突。

在mysql5.7 的binlog中新增了两个字段来来标注哪些事务可以并行执行,和binlog的写入顺序

last_committed:事务提交编号,同一组内的事务,编号相同,可以并行执行。

sequence_number:binglog写入顺序,用户确保master的binlog顺序和slave的binlog顺序的一致。

多线程复制中的一些问题

1.binlog以组为顺序并发重做,如果上一组binlog中有某个sql执行失败,整组sql是否回滚,slave复制是否暂停?

如果一组中的某个sql执行失败,整组sql都会回滚,

这个时候整个slave是否会暂停,有待验证

2.并行复制中如何保证master上的binlog和slave上binglog的顺序一致

在mysql5.7中为了实现并行复制,特地在binlog日志中增加了两个字段,last_committd,sequence_number,

在slave上按组并行重放的时需要等待组中所有sql执行完成,然后在flush阶段按照sequence_number排序,并行提交,

这样就保证了,master上binlog的的写入顺序就和slave上的binlog的写入顺序相同了。

参考资料

mysql5.7并行复制相关简介:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值