一、缘由:

  某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下。

  一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->IO Thread (从) -----> SQL Thread(从)。复制出现延迟一般出在两个地方

1)SQL线程忙不过来(可能需要应用数据量较大,可能和从库本身的一些操作有锁和资源的冲突;主库可以并发写,SQL线程不可以;主要原因)

2)网络抖动导致IO线程复制延迟(次要原因)。

二、解决办法:

  MySQL从5.6开始有了SQL Thread多个的概念,可以并发还原数据,即并行复制技术。

  MySQL 5.6中,设置参数slave_parallel_workers = 4(>1),即可有4个SQL Thread(coordinator线程)来进行并行复制,其状态为:Waiting for an evant from Coordinator。

但是其并行只是基于Schema的,也就是基于库的。如果数据库实例中存在多个Schema,这样设置对于Slave复制的速度可以有比较大的提升。通常情况下单库多表是更常见的一种情形,

那基于库的并发就没有卵用。其核心思想是:不同schema下的表并发提交时的数据不会相互影响,即slave节点可以用对relay log中不同的schema各分配一个类似SQL功能的线程,

来重放relay log中主库已经提交的事务,保持数据与主库一致。

  在MySQL 5.7中,引入了基于组提交的并行复制(Enhanced Multi-threaded Slaves),设置参数slave_parallel_workers>0并且global.slave_parallel_type=‘LOGICAL_CLOCK’,

即可支持一个schema下,slave_parallel_workers个的worker线程并发执行relay log中主库提交的事务。其核心思想:一个组提交的事务都是可以并行回放(配合binary log group commit);

slave机器的relay log last_committed相同的事务(sequence_num不同)可以并发执行。

  其中,变量slave-parallel-type可以有两个值:DATABASE 默认值,基于库的并行复制方式;LOGICAL_CLOCK:基于组提交的并行复制方式

MySQL 5.7开启Enhanced Multi-Threaded Slave配置:

# slave
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON

至此,MySQL彻底解决了复制延迟问题,可喜可贺!

最新文章

  1. python不是内部或外部命令
  2. php下xcache的安装
  3. WinSCP 连接 Ubuntu 拒绝的问题
  4. IE6兼容透明JS
  5. chrome拓展开发实战
  6. Oracle 删除用户和表空间
  7. css笔记13:display用法
  8. php 仿百度文库
  9. git 分支策略
  10. 浅谈PPM (Project Portfolio Management) - 1
  11. hadoop的安装和配置(三)完全分布式模式
  12. QT5:C++实现基于multimedia的音乐播放器(二)
  13. CSS宽高背景介绍
  14. android项目生成aar和引用aar解决方案
  15. linux下如何安装mysql和redis
  16. URL List by Category
  17. c++中double类型控制小数位数
  18. Java文件管理系统
  19. 【转载】Python字符串操作之字符串分割与组合
  20. volatile特性

热门文章

  1. 使用 PHP_CodeSniffer 检查 代码 是否 符合 编码规范
  2. 报错libtest: error while loading shared libraries: libuv.so.1: cannot open shared object file: No such file or directory
  3. sklearn数据预处理
  4. WP8.1学习系列(第二十七章)——ListView和GridView入门
  5. git diff命令详解
  6. CentOS搭建内网NTP服务器
  7. [No0000103]JavaScript-基础课程3
  8. struts2 中 paramsPrepareParamsStack 拦截器
  9. day13: 迭代器和生成器
  10. mysql 超时时间