返回顶部
首页 > 资讯 > 数据库 >如何理解 mysql5.中的并行复制
  • 323
分享到

如何理解 mysql5.中的并行复制

2024-04-02 19:04:59 323人浏览 泡泡鱼
摘要

如何理解 Mysql5.中的并行复制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 一 、 前言  &

如何理解 Mysql5.中的并行复制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一 、 前言
    在 5.5以及5.5版本之前,复制流程图如下:

    如何理解 mysql5.中的并行复制

    流程:
    ① 主库dump thread 发现binlog有更新,则向 slave 的 io thread 推送相应的 binlog events
    ② slave 的 IO thread 在接收到 master新产生的events 之后 ,写入到自己的 relay log 中。
    ③ slave 的 sql thread 开始应用 relay log,执行相应的更新语句

    弊端:
    ① master 在多个连接 并发的写入的情况下, slave 仅仅只有一个 sql thread 进行更新,会严重的造成主从延迟

二 、 并发复制
    官方称之为enhanced multi-threaded slave(简称MTS),在官方 mysql5.6 版本出现之前 , 阿里就有人实现过 slave 的并发复制的功能,按照粒度分为 database , table  ,row 的。这里我们主要讲官方版本。
    1> mysql5.6基于 database 的并行复制
        通过 slave_parallel_workers=n 来设置并发复制的worker线程数量
        流程:
        ① 主库dump thread 发现binlog有更新,则向 slave 的 IO thread 推送相应的 binlog events
        ② slave 的 IO thread 在接收到 master新产生的events 之后 ,写入到自己的 relay log 中。
        ③ slave 的 coordinator thread 根据 binlog events 的 database 进行hash 调度分配给 worker thread
        ④ worker 线程 执行相应的 更新语句,互不影响

        分析:
        ① 实现了对database 的并行复制,在多库更新的情况下slave的写入提升明显,但若是master主要在某个database更新的话则此并行复制比较鸡肋

    2> mysql5.7基于 database/logical_clock 的并行复制
        新添参数 slave_parallel_type=DATABSE/LOGICAL_CLOCK 设定并行复制的方式,其中database跟5.6一样,我们这里讨论下为 LOGICAL_CLOCK的模式

        原理:  通过 在 master提交分为两个阶段 prepare 和 commit , 同时 prepare 的 事物标记相同的 last_commited(为当前最近一次提交事务的 seq num) 。commit 的时候给相应的事务标记 sequence num(依次递增)来实现,这些组提交的信息记录在GTID中。
        流程 :
        ① 主库dump thread 发现binlog有更新,则向 slave 的 IO thread 推送相应的 binlog events
        ② slave 的 IO thread 在接收到 master新产生的events 之后 ,写入到自己的 relay log 中。
        ③ slave 的 coordinator thread 把 binlog events 中相同的 last_commited 的进行分配给 worker thread
        ④ worker 线程 执行相应的 更新语句,互不影响 , 对于每个事务 ,其中seq=n 的执行完毕之后 , last_commited=n 的便可以执行了。

         这里 已经几乎跟 master的 并发操作一样了,所以对于slave 来说这种基于 组提交的 并发复制已经达到了 master的并发度

         举例:
          
          如何理解 mysql5.中的并行复制
               第一个数字为 last_commited , 第二个数字为 seq num

               slave 上执行的顺序为 

                ① trx1 trx2 trx3
                ② trx4
                ③ trx5 trx6
                ④ trx7
                其中,trx1 执行完毕 便可以执行 trx4 ;trx2执行完毕 便可以执行 trx5 trx6; trx5执行完毕 便可以执行trx7.


PS:对于是否开启 GTID 进行了一番测试( 针对从库设置 slave_parallel_type= LOGICAL_CLOCK的情况 )
1> 5.6 --> 5.6
     基于 database 的并行复制 没有问题

2> 5.7 --> 5.7
     ① 开启GTID 的情况下,将组提交的 last_commited 和 seq num等信息记录到 GTID 中;
     ② 未开启 GTID 的情况下 mysql5.7会 在每次提交events之前 set gtid_next='annonymous',因此会产生一个annonymous_gtid ,然后将组提交的 last_commited 和 seq num等信息记录下来 ,可以实现并行复制。

3> 5.6 --> 5.7
     ① 未开启 GTID 的情况下 ,mysql5.6 作为master 并不会 进行 set gtid_mode='annonymous' 操作,故而不会有last_commited 和 seq num ,mysql5.7 slave的并行复制设置失效(实际单线程执行更新语句),不会报错。
     ② 开启 GTID 的情况下,倘若 master没有并发事务,并行复制设置失效(实际单线程执行更新语句),则复制不报错;若有并发事务,则复制直接出错,内容如下图(意思是 5.6的格式的events 到了5.7这里在设置 logical_clock的情况下无法识别)
        如何理解 mysql5.中的并行复制
以上 在 slave_parallel_type=DATABASE的情况下没有问题。
综上,不要在 5.6--->5.7的同步中开启 logical_clock 模式的并行复制

看完上述内容,你们掌握如何理解 mysql5.中的并行复制的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解 mysql5.中的并行复制

本文链接: https://lsjlt.com/news/66261.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解 mysql5.中的并行复制
    如何理解 mysql5.中的并行复制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 一 、 前言  &...
    99+
    2024-04-02
  • Mysql5.7如何并行复制
    这篇文章将为大家详细讲解有关Mysql5.7如何并行复制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。启用MySQL并行复制MySQL 5.7的并行复制建立在组提交的基础...
    99+
    2024-04-02
  • 如何进行MySQL并行复制测试
    今天就跟大家聊聊有关如何进行MySQL并行复制测试,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。    对于主从延迟,其实一...
    99+
    2024-04-02
  • MySQL Replication中的并行复制示例详解
    目录传统单线程复制说明总结mysql5.6基于库级别的并行复制MySQL5.7基于组提交的并行复制组提交说明MySQL8.0基于writeset的并行复制关键参数查看参数配置项说明引用资料:传统单线程复制说明 众所周知,...
    99+
    2022-07-01
    MySQL Replication并行复制 MySQL 并行复制
  • MySQL5.7并行复制原理及实现
    稍微了解过一点的数据的运维就知道MySQL 5.5以及之前是单SQL线程回放,如果Master QPS稍微高点,从上就有延迟了,5.6是基于库的并行回放机制,只有当多个库的话才有复制才有优势,而5.7是基于组的并行回...
    99+
    2022-06-01
    MySQL5.7并行复制 MySQL 并行复制
  • MySQL中并行复制乱序提交引起的同步异常如何处理
    这篇文章将为大家详细讲解有关MySQL中并行复制乱序提交引起的同步异常如何处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现象描述Slave在开启并行复制后, 默认会乱...
    99+
    2024-04-02
  • 深入浅出讲解MySQL的并行复制
    一、并行复制的背景 首先,为什么会有并行复制这个概念呢? 1. DBA都应该知道,MySQL的复制是基于binlog的。  2. MySQL复制包括两部分,IO线程 和 SQL线程。 ...
    99+
    2024-04-02
  • 实例解读:MySQL并行复制如何解决特定的主从问题?
    并行复制存世已多年,但是在实际应用场景中的使用并不常见。这次很幸运,我们刚好遇到一个客户,主的写入工作量非常大,但是从难以跟上,在这种情况下,我建议它使用并行从属线程。 那么,如何衡量并行复制是否在客...
    99+
    2024-04-02
  • 浅析MySQL的WriteSet并行复制
    【历史背景】   岁月更迭中我已经从事MySQL-DBA这个工作三个年头,见证MySQL从“基本可用”,“边缘系统可以用MySQL”,“哦操!你怎么不用MySQL”;   正所谓!“一个数据库的境遇既取决于历史的进程...
    99+
    2022-05-31
    MySQL WriteSet并行复制 MySQL WriteSet MySQL 并行复制
  • MySQL Replication中并行复制怎么实现
    这篇文章主要介绍“MySQL Replication中并行复制怎么实现”,在日常操作中,相信很多人在MySQL Replication中并行复制怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-07-02
  • 如何理解.NET 4并行编程中Task的取消
    如何理解.NET 4并行编程中Task的取消,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。因为Task是.NET 4并行编程最为核心的一个类,也我们在是在并行编...
    99+
    2023-06-17
  • MySQL并行复制的深入浅出
    一、并行复制的背景 首先,为什么会有并行复制这个概念呢? 1.DBA都应该知道,MySQL的复制是基于binlog的。 2.MySQL复制包括两部分,IO线程 和 SQL线程...
    99+
    2022-05-24
    MySQL MySQL
  • 如何理解.NET 4并行编程
    这期内容当中小编将会给大家带来有关如何理解.NET 4并行编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.并行编程和多线程编程的区别。1并行编程。现在随着多核计算机的普及,并行编程技术,也就是多核编...
    99+
    2023-06-17
  • mysql中三种复制机制异步复制,半同步复制和并行复制详细介绍
    下面一起来了解下mysql中三种复制机制异步复制,半同步复制和并行复制,相信大家看完肯定会受益匪浅,文字在精不在多,希望mysql中三种复制机制异步复制,半同步复制和并行复制这篇短内容是你想要的。**# 异...
    99+
    2024-04-02
  • Go语言的高并发场景中如何使用WaitGroup进行并行控制?
    在 go 语言中,使用 waitgroup 进行并行控制的步骤如下:初始化一个 waitgroup 实例。使用 add 方法添加要等待的 goroutine 数量。等待所有 gorout...
    99+
    2024-05-10
    go语言 同步机制
  • 如何理解MySQL复制技术中的一主多从
    这期内容当中小编将会给大家带来有关如何理解MySQL复制技术中的一主多从,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MySQL复制技术之一主多从   ...
    99+
    2024-04-02
  • 如何解析Redis中的集群主从复制原理
    这篇文章将为大家详细讲解有关如何解析Redis中的集群主从复制原理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 本篇文章带大家...
    99+
    2024-04-02
  • JavaScript中Promise如何处理异步的并行与串行
    这篇“JavaScript中Promise如何处理异步的并行与串行”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaSc...
    99+
    2023-07-04
  • Git 中如何进行复制和粘贴
    在使用 Git 进行开发时,常常会需要复制、粘贴一些代码片段或命令。但是,如果你在终端中直接使用 Ctrl+C、Ctrl+V 等组合键进行复制和粘贴,很可能会遇到一些问题。本文将介绍 Git 中如何进行复制和粘贴。复制在 Git 执行命令时...
    99+
    2023-10-22
  • 如何理解MySQL多线程复制
    这篇文章给大家介绍如何理解MySQL多线程复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Enhanced Multi-threaded Slaves首...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作