原文:[MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7

一、缘由:

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

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

relay_log_info_repository=TABLE

relay_log_recovery=ON

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

三、参考文档

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

  1. jfinal mysql读写分离_在JFinal中对数据库读写分离的实现:报错 -问答-阿里云开发者社区-阿里云...

    频繁使用 use(configName) 没有任何性能问题,仅仅是为变量赋一个 string 值而已,完全可以忽略######@JFinal######我现在也使用,读用的是视图model,写操作使用 ...

  2. mysql 5.1版本无innodb trx_MySQL 5.7: Innodb 事务子系统优化-阿里云开发者社区

    MySQL5.7 : Innodb 事务子系统优化 之前写了篇博客介绍了Percona Server对Read View的优化,顺带简单提到了MySQL5.7的事务子系统优化,详细见http://my ...

  3. canal同步mysql到kafka_使用Canal同步MySQL数据到Kafka 得到的数据中sql字段无值-问答-阿里云开发者社区-阿里云...

    这个应该跟你的binlog记录模式有关系,binlog有3中模式,ROW(行模式), Statement(语句模式), Mixed(混合模式)三种模式的用法如下: ROW(行模式):记录那条数据修改了 ...

  4. 存储过程mysql into select into_mysql 存储过程select into select into select的搜索结果-阿里云开发者社区...

    对一个MySQL存储过程的优化 在编写MySQL存储过程的过程中,我们会时不时地需要对某些存储过程进行优化,其目的是确保代码的可读性.正确性及运行性能.本文以作者实际工作为背景,介绍了对某一个MySQ ...

  5. python预测实例教程_手把手教你用Python库Keras做预测(附代码)-阿里云开发者社区...

    当你在Keras中选择好最合适的深度学习模型,就可以用它在新的数据实例上做预测了.但是很多初学者不知道该怎样做好这一点,我经常能看到下面这样的问题: "我应该如何用Keras对我的模型作出预 ...

  6. mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

  7. cmake mysql 参数_MySQL cmake编译时这些参数是什么意思?-问答-阿里云开发者社区-阿里云...

    一般用到的参数# -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装路径 # -DMYSQL_DATADIR=/usr/local/mysql/data \ # ...

  8. mysql 视图会走索引吗_MySQL视图索引与存储过程精析-阿里云开发者社区

    1.MySQL分页查询 1.1 limit函数: SELECT * FROM emp LIMIT 3 –只查询三条数据,其他忽略 1.2 select * from emp order by empn ...

  9. python的requests模块功能_《Python数据可视化编程实战》—— 1.7 安装requests模块-阿里云开发者社区...

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第1章,第1.7节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

最新文章

  1. 实战ALV OO技术实现添加工具条按钮
  2. Inception GoogLeNet
  3. servlet的线程安全性问题
  4. linux重启python服务_如何将python脚本作为linux服务启动
  5. 鸿蒙会取代emui,华为称自家手机运行鸿蒙系统正在推进 未来会取代安卓吗?
  6. python处理识别图片验证码
  7. 利用border设置transparent绘制图形
  8. java实现凸包算法_JAVA语言中实现凸包算法
  9. Shadow-插件化框架分析
  10. Python提取PDF简历中的信息,写入Excel
  11. js原生往父元素中添加子元素
  12. android 电视安装apk文件损坏,智能电视无法安装APK文件?原因都在这里!
  13. Chaos Mesh® 在腾讯——腾讯互娱混沌工程实践
  14. PHP 递归函数的理解
  15. 线程之interrupt
  16. 2013年6月2日星期日
  17. 世道变了,微软连Java都支持了
  18. Zabbix通过JMX监控Java应用
  19. 前端适配:移动端/web端适配方案
  20. PROFIBUS总线光纤模块在矿场设备的应用案例

热门文章

  1. DTCMS插件的制作实例电子资源管理(三)前台模板页编写
  2. react.js 多个组件集成示例
  3. 使用Android简单实现有道电子词典
  4. hdu 3905(dp)
  5. 素数之年,IT运维其实可以很简单
  6. Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建高性能web服务器
  7. 轮播图的3个常见bug,即处理bug思路及其解决办法
  8. EntityFramework codefirst
  9. 一起啃PRML - 1.2.1 Probability densities 概率密度
  10. Javascrpt无刷新文件上传