mysql备份全库_数据备份策略有哪几类

mysql备份全库_数据备份策略有哪几类本文主要介绍 MySQL 备库的并行复制策略。

MySQL45讲之备库并行复制策略 - flowers

前言

本文主要介绍 MySQL 备库的并行复制策略。

为什么备库需要并行复制

如果主库有大量更新操作,因为主库可以并发写入,而备库只能单线程执行的话,那么备库的同步延迟会不断累加,即备库越来越追不上主库。所以,后面有了备库的并行复制。

备库的并行复制模型:

并行复制模型

coordinator 职责是分发 binlog 给工作线程,真正执行同步的是 worker。

按表分发策略

每个 worker 工作线程都对应一个表,coordinator 根据 binlog 内容将事务分发到不冲突的 worker 中并行执行,如果发生冲突,则等到不冲突的情况再分发到 worker 中执行。

以“数据库名 + 表名”为键,判断是否冲突:

  1. 如果待分发事务的键和 worker 存在键冲突数等于0,则选择空闲的 worker 执行;

  2. 如果待分发事务的键和 worker 存在键冲突数等于1,则选择冲突的 worker 执行;

  3. 如果待分发事务的键和 worker 存在键冲突数大于1,则等待直到前两个条件符合;

按行分发策略

和按表分发策略同理,不过是以“数据库名 + 表名 + 主键名 + 主键值”或者“数据库名 + 表名 + 唯一键名 + 唯一键值”为键来判断冲突,需要计算更多的键。

为什么还需要判断唯一键是否冲突?
因为并发执行时,执行时序不与原先相同,原先后执行的事务可能现在先执行,有可能会导致不符合唯一性约束,造成数据不一致。

组提交并行策略

MariaDB 提出的并行复制策略

MySQL 组提交的前提是组里面的事务是不冲突的,或者说并行执行不影响数据一致性的。组提交时,在 binlog 中记录 commit_id,那么在备库分发时,将同一个 commit_id 的事务分到不同的 worker 并行执行。

不过,这个方法存在一个缺陷。备库每次执行分发同一个 commit_id 下的事务到 worker 中执行,等都执行完之后,才可以分发下一个 commit_id 对应的事务。这样的话,备库并不是真正地在并行复制,并且,如果一个 commit_id 下的某个事务是大事务,那么将导致下一组执行的时间延后,即存在“短板效应”。

组提交优化策略

MySQL5.7 提出的并行复制策略,在 MariaDB 并行复制策略上进行了优化。

根据 MySQL 两阶段提交,只要处于 prepare 阶段的事务就可以并行执行。所以,下面情况下的事务都可以并行执行:

  1. 同时处于 prepare 的事务

  2. 处于 prepare 和 commit 之间的事务

write_set策略

在主库写入 binlog 之前,计算事务涉及的每一行的 hash 值,写入 binlog,这样在备库分发的时候就不需要解析 binlog 来判断,只需要判断两个事务是否有交集来判断是否可以并行,提交运行效率。

因为不需要解析 binlog 来获取信息,所以该方法下, binlog 采用 statement 和 row 格式都可以。

此外,还有 write_set_session 策略,它在 write_set 策略上加了一个约束,同一个线程先后执行的两个事务,在备库复制时不能并行。

参考

  • [1] 备库为什么会延迟好几个小时

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5794.html

(0)
上一篇 2023-04-24
下一篇 2023-04-24

相关推荐

  • Mysql Explain详解「建议收藏」

    Mysql Explain详解「建议收藏」Explain简介 本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些…

    2023-03-03
    153
  • Python实现HTML文件自动生成

    Python实现HTML文件自动生成在现代化的互联网时代,网站和应用程序经常需要动态地生成HTML代码协作网页的呈现。在Python中,我们可以轻松地使用HTML模板来自动生成HTML文件,减少手动开发HTML文件的时间和人力成本。

    2023-12-05
    125
  • Python中使用字典实现高效查找

    Python中使用字典实现高效查找Python中的字典是一种无序的、可变的、可迭代的数据类型。字典中的元素都是用键值对的形式来表示,每个键值对之间用冒号隔开,不同的键值对之间用逗号隔开,整个字典需要用花括号{}来包裹。

    2023-12-29
    113
  • COSCon'19 | 如何设计新一代的图数据库 Nebula

    COSCon'19 | 如何设计新一代的图数据库 Nebula11 月 2 号 – 11 月 3 号,以“大爱无疆,开源无界”为主题的 2019 中国开源年会(COSCon'19)正式启动,大会以开源治理、国际接轨、社区发展和开源项目为切入点同全球开…

    2022-12-17
    131
  • SQL Server解惑——对象命名的唯一性小结

    SQL Server解惑——对象命名的唯一性小结关于SQL Server数据库中的对象命名的唯一性问题。例如表、索引、约束等数据库对象,有时候DBA在做数据库维护时,经常要创建对象或重命名对象,此时就会遇到一个问题,对象命名的唯一性问题。虽然是一个

    2023-01-30
    149
  • 使用Python创建图形用户界面的简单方法

    使用Python创建图形用户界面的简单方法在软件开发的过程中,使用图形用户界面(GUI)来展示和操作数据是至关重要的。Python是一种强大的编程语言,有许多GUI库可以使用。在本文中,我们将会简要介绍一些使用Python创建GUI的简单方法。

    2024-01-17
    110
  • Python:函数和模块的区别及应用

    Python:函数和模块的区别及应用在Python中,函数和模块都是非常重要的概念。虽然有些相似,但实际上两者之间有一些根本性的区别。本文将从多个方面对Python函数和模块进行详细的阐述,让读者更好地理解两者的区别及应用。

    2024-03-20
    74
  • Oracle 回滚段

    Oracle 回滚段–查询数据文件 select t.TABLESPACE_NAME, –表空间名 t.FILE_NAME, –文件名 t.AUTOEXTENSIBLE, –是否自动扩展 t.BYTES / 1…

    2022-12-18
    145

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注