一、缘由:

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

  一般主从复制,有三个线程参与,都是单线程: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配置:

# slaveslave-parallel-type=LOGICAL_CLOCKslave-parallel-workers=16master_info_repository=TABLErelay_log_info_repository=TABLErelay_log_recovery=ON

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

三、参考文档

  官方文档:https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html

  Inside君的文章:http://www.ttlsa.com/mysql/mysql-5-7-enhanced-multi-thread-salve/

本文出自http://www.cnblogs.com/langdashu/p/6125621.html

转载于:https://blog.51cto.com/lookingdream/1909338

MySQL5.7号称永久解决了复制延迟问题的并行复制相关推荐

  1. mysql5.7延迟_[MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7-阿里云开发者社区...

    原文:[MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7 一.缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下. 一般主从复制,有三个线程参与,都是单线程: ...

  2. mysql 5.6 并行复制_MySQL 5.6并行复制架构

    诚然,MySQL 5.6版本也支持所谓的并行复制,但是其并行只是基于schema的,也就是基于库的.如果用户的MySQL数据库实例中存在多个schema,对于从机复制的速度的确可以有比较大的帮助.My ...

  3. MySQL备库复制延迟的原因及解决办法

    背景 今天有同事问我主从复制延迟会影响高可用切换的 RTO 怎么办,这个不需要做实验,我可以直接回答,所以有了以下赶鸭子的文章,都是一线运维经验之谈,建议四连:点赞.收藏.转发.在看. 复制延迟的原因 ...

  4. mysql 多线程并行复制_【MySQL】开启并行复制

    [MySQL]开启并行复制 一.介绍 在官方的 5.6 版本之前,MySQL 只支持单线程复制,由此在主库并发高.TPS 高时就会出现严重的主备延迟问题. 如果备库执行日志的速度持续低于主库生成日志的 ...

  5. mysql复制多行_mysql中的复制方式总结(半同步复制,并行复制,多源复制)

    一.MySQL主从复制(异步复制,默认) Mysql主从复制原理 Mysql的复制原理大致如下: 1.主库记录binlog日志 在每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志b ...

  6. MySQL 5.7 并行复制实现原理与调优

    转载:http://www.innomysql.net/article/16317.html Contents 1 MySQL 5.7并行复制时代 2 MySQL 5.6并行复制架构 3 MySQL ...

  7. InnoSQL/MySQL并行复制的实现与配置

    InnoSQL/MySQL并行复制的实现与配置 http://www.innomysql.net/article/6276.html 并行复制之前的解决方案 InnoSQL在5.5.30-v4版本中支 ...

  8. 故障分析 | 记一次 MTS 并行复制导致的死锁排查

    作者:刘开洋 爱可生交付服务团队北京 DBA,对数据库及周边技术有浓厚的学习兴趣,喜欢看书,追求技术. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源 ...

  9. MySQL异步复制延迟解决的架构设计与运维架构ppt

    <MySQL异步复制延迟解决的架构设计与运维架构ppt> 下载地址:网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731216.html

最新文章

  1. 梦美生命获1亿元A轮融资,鼎晖领投
  2. 待遇46K起,这几个公众号在招人!
  3. 京东员工怒怼公司:每天工作到很晚甚至凌晨,你跟我说这是幸福?
  4. python如何去掉一个字符串两边的引号
  5. 解决QT出现XXXX.dll不能加载问题
  6. golang mysql proxy_mixer: 一个用go实现的mysql proxy
  7. CascadingStyleSheets
  8. 正则汇总 个人汇总 不断更新中
  9. NOR和NAND Flash存储器的区别
  10. 哈希表数据结构_Java数据结构哈希表如何避免冲突
  11. Flink 状态管理
  12. 74cms3.0 SQL注入
  13. 一转眼,波士顿动力 Atlas 机器人又会过独木桥了!
  14. latex排版——博雅编辑室
  15. Dell optiPlex麦克风显示未插入问题解决
  16. 齐博x1教程:快速增加下拉菜单
  17. 天堂2java gm设置_请教私服GM用什么命令调整服务器属性啊?
  18. NYOJ2347---LYQの字符串(技巧题:应该是滑动窗)
  19. “大数据治理”专题导读
  20. 银行术语之“表内”“表外”

热门文章

  1. 在Exchange Server 2007中使用多主机名称证书
  2. Linux操作系统下利用SSH进行远程控制
  3. 剑指offer 算法 (代码的完整性)
  4. SpringBoot之CommandLineRunner,预先加载系统数据
  5. spark(1.1) mllib 源代码分析
  6. 初探领域驱动设计(1)为复杂业务而生
  7. InfluxDB 开源分布式时序、事件和指标数据库
  8. 程序员应该知道的七个图形工具
  9. 聊天机器人中的深度学习技术(引言)
  10. 在caffe上跑自己的数据