Mysql多线程复制

Mysql复制原理

MyAnswer博客


1.Master节点上的binlogdump线程,在slave与其正常连接的情况下
将binlog发送到slave上
2.Slave节点上的IO/ Thread,通过读取master节点binlog日志名
称以及偏移量信息将其拷贝到本地的relay log 日志文件
3.Slave节点节点的SQL Thread,该线程读取relay log 日志信息
将在master节点上提交的事务在本地回放
达到与主库数据保持一致的目的

Mysql5.5及以前的复制

1.一般主从复制有三个线程且都是单线程
2.Binlog Dump(主) ---> IO Thread(从) ----> SQL Thread(从)
3.而master这边是通过并发线程提交,事务通过LSN写入binlog
但是Slave只有一个IO线程和SQL线程,是单线程所以在业务量大的情况下就很容易造成主从延迟

Mysql5.6支持并行复制(基于库)

1.开启并行复制    slave_parallel_workers > 0  配置worker的个数(一般是cpu核心数)
2.SQL线程就变为了coordinator线程,coordinator线程主要负责以下两个部分内容
若判断可以并发执行,那么选择worker线程执行事务的二进制日志,coordinator线程并不是
仅将日志发送给worker线程自己也可以回放日志,但是所有可以并发的操作交付由worker线程完成
3.上述机制实现的基于schema的并行复制,存在的问题是,这样设计的并行复制效果并不高,如果用户
实例仅有一个库,那么就无法实现并行回放,甚至性能会比原来的单线程更差
而单库多表是比多库更为常见的一种情形;

Mysql5.7的MTS

1.不再有基于库的并行复制限制,主要思想就是slave服务器的回放与主机是一致的
即master服务器上是怎么并发执行的,slave上就怎么样并发回放
2.mysql 5.7.2进行了优化,增加了参数  slave_paraller_type
   LOGICAL_CLOCK:基于逻辑时钟,可以在一个DATABASE中并发执行relay log 事务
   DATABASE:基于数据库, v5.6默认就是这个参数,该参数每个库只能一个线程
3.slave_parallel_workers工作进程的个数
4.从库配置和参数
server‐id = 102
gtid‐mode = ON
enforce‐gtid‐consistency = ON
slave_parallel_type=LOGICAL_CLOCK --并行复制
slave_parallel_workers=2    --并行复制
master_info_repository=TABLE--开启MTS功能后,会频繁更新master.info设置为TABLE减小开销
relay_log_info_repository=TABLE--开启MTS功能后,会频繁更新master.info设置为TABLE减小开销
relay_log_recovery=ON   --保证relay-log的完整性
slave_preserve_commit_order=ON   -- 保证提交的顺序性
log_bin=mysql‐bin
log_slave_updates=ON


MyAnswer博客

MyAnswer博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论