返回顶部
首页 > 资讯 > 数据库 >TiDB用什么保证备份的一致性
  • 572
分享到

TiDB用什么保证备份的一致性

2024-04-02 19:04:59 572人浏览 薄情痞子
摘要

TiDB用什么保证备份的一致性,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。背景作为一名Mysql DBA,就应该了解mysql备份无论是

TiDB用什么保证备份的一致性,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

背景

作为一名Mysql DBA,就应该了解mysql备份无论是逻辑备份还是物理备份,都会使用FLUSH TABLES WITH READ LOCK(下面简称FTWRL)来保证数据库备份的一致性。

描述FTWRL锁对一致性的影响

先拿,Mysql逻辑备份MySQLDump举例。

MySQLDump,为了保证备份一致性,需要添加2个参数     

--single-transaction  --master-data=2 。

在开启--single-transaction后,MySQLDump的备份流程大概就是,在MySQL中会执行如下操作。

1、刷新表flush tables 用来防止DDL操作。

2、执行FTWRL锁,这个时候整个数据库整体被锁住,让数据库处于一个一致性的状态。

3、设置当前session(回话)事务的隔离级别为RR。

4、记录当前的MySQLbinlog的位置,或者GTID信息。

5、解锁。#从加锁到解锁执行速度会很快,前提是没有锁冲突,如果有锁冲突,就会到锁等待的一个状态。

物理备份xtrabackup,物理备份执行FTWRL锁的时间相对较长,下面来看一下xtrabackup对FTWRL锁的流程。

  •  执行FTWRL锁。

  •  拷贝frm、MYD、MYI、etc拷贝。

  •  等待redo的拷贝完成。

  •  记录当前的MySQLbinlog的位置,或者GTID信息。

  •  解锁。

xtrabackup加锁是为了保证在数据库中如果有MyiSAM表,尽量保证MyiSAM表的备份一致性。

#之前有个同学说。物理备份加FTWRL锁会比逻辑备份加锁时间短,这个结论其实是错误的。物理备份加锁的时间完全取决一下当前数据库里有没有MyiSAM表,MyiSAM表的大小。

TiDB是用什么保证数据库一致性的

先说TiDB官方推荐的逻辑备份mydumper, 一开始我以为mydumper也是用FTWRL锁来保证备份的一致性。结果我今天在看文档的时候发现,这个结论是错误的。

官方对mydumper进行了优化和修改。先看一下官方的描述。下面内容来自TiDB官方文档。

1、对于 TiDB 可以设置 tidb_snapshot 的值指定备份数据的时间点,从而保证备份的一致性,而不是通过 FLUSH TABLES WITH READ LOCK 来保证备份一致性。

2、使用 TiDB 的隐藏列 _tidb_rowid 优化了单表内数据的并发导出性能。

大家先记住 TiDB 是通过 tidb_snapshot,来实现备份,而不是FTWRL锁来保证。这么设计会有什么问题?能保证数据备份的一致性吗?

要解答这个问题,要简单说一下TiDB的架构设计

TiDB的存储节点是TiKV,下面主要针对TiKV来说。先把TiKV,理解为很大的一个Key-value的存储器。

TiDB用什么保证备份的一致性

(图1选自TiDB官方文档)

这块跟备份其实没有什么关系,先让大家大概了解一下TiKV存什么。

下面的内容就跟备份有关系了,TiDB 的mvcC(多版本控制器)实现是在TiKV中。TiKV中加了MVCC,key和value这样的。

TiDB用什么保证备份的一致性

我认为version就是TSO(全局唯一递增时间戳),我是通过TiDB二阶段提交中发现的。

如果不是的话version的版本信息就会存在PD里面,这样设计的话会增加PD的压力,感觉不现实。

针对上面描述有一个小的结论TiKV里面会存储历史key的信息。

下面还是来一个问答来解答上面的疑问。

问:TiDB是通过什么来保证数据的一致性的?

答:是基于TiKV里面的MVCC来保证的,根据当前的的时间戳信息,来下发命令 

sql="SET SESSION tidb_snapshot = '415599012634951683'"。

这个session就会读到这个时间点的历史版本的数据。

下一步的操作,只要把所有的表和里面的数据扫出来就可以了。

问:通过MVCC实现的备份,能达到一致性吗?(因为没有锁)

答:是可以的,大家可以看一下我之前写的《浅析TiDB二阶段提交》那篇文章中里面有写到,只有事务成功提交才能会写入到TiKV中,才会有TSO(全局唯一递增时间戳)。也就是TiKV中里面的key都是成功提交的。

那么在备份的过程中提交的成功的事务是不会被扫到的。

因为备份过程中提交的事务的tso(全局唯一递增时间戳)会大于当前的备份发起的tso(全局唯一递增时间戳)。

问: 使用了MVCC的备份方式,会有哪些问题?

答:我认为最大的问题就是 在备份的过程中老的key被GC(垃圾清理)掉,解决这个问题的最好的办法,可以把GC(垃圾清理)时间设置的长一点。

UPDATE mysql.tidb SET VARIABLE_VALUE = '800h' WHERE VARIABLE_NAME = 'tikv_gc_life_time';

可以设置为800h(根据时间情况而定),备份结束后要修改回来,否则会浪费存储空间。

通过上面的描述,大家应该会了解到TiDB对备份的一致性处理的相关细节。

在TiDB4.0的分布式备份恢复工具br,在这块处理是类似的。也是利用MVCC的方式来实现的。

最后在安利一下TiDB4.0的备份工具br。备份的速度快,消耗资源相对较低。下面的案例仅供参考大家感兴趣的话 我可以做一下详细的测试,留言刷起来。

机器描述:三台腾讯云4C8G SSD50G,Sysbench 压力10张表每张表1千万条数据。

TiDB用什么保证备份的一致性

整体大概5分钟左右,brlog里面会记录相关信息。

开始时间16:44:27.009 结束时间16:49:40.395

TiDB用什么保证备份的一致性

TiDB用什么保证备份的一致性

相同环境我用mydumper测,mydumper运行在tidb的节点上。

mydumper是4个线程数(默认线程数)

他备份的过程中把tidb压的OOM了。

#可以用-r参数控制每个并发处理的数据量来避免。

TiDB用什么保证备份的一致性

TiDB用什么保证备份的一致性

大概是我的机器配置低,而且mydumper和tidb-server是同一台机器。

关于TiDB用什么保证备份的一致性问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: TiDB用什么保证备份的一致性

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

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

猜你喜欢
  • TiDB用什么保证备份的一致性
    TiDB用什么保证备份的一致性,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。背景作为一名MySQL DBA,就应该了解MySQL备份无论是...
    99+
    2024-04-02
  • MySQL怎么保证备份数据的一致性
    这篇文章主要讲解了“MySQL怎么保证备份数据的一致性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL怎么保证备份数据的一致性”吧!前言为了数据安全,数据库需要定期备份,这个大家都懂...
    99+
    2023-06-30
  • MySQL如何保证备份数据的一致性详解
    目录前言1. 全库只读2. 全局锁3. 事务4. 小结前言 为了数据安全,数据库需要定期备份,这个大家都懂,然而数据库备份的时候,最怕写操作,因为这个最容易导致数据的不一致,松哥举一...
    99+
    2024-04-02
  • MySql备份时怎么保持数据一致性
    这期内容当中小编将会给大家带来有关MySql备份时怎么保持数据一致性,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、直接拷贝整个数据目录下的所有文件到新的机器。优点是简...
    99+
    2024-04-02
  • MySQL是怎么保证主备一致的
    目录MySQL 主备的基本原理binlog 的三种格式对比为什么会有 mixed 格式的 binlog?循环复制问题总结:抛出问题:大家知道 binlog 可以用来归档,也可以用来做...
    99+
    2024-04-02
  • mysqldump备份时如何保持数据的一致性
    mysqldump对不同类型的存储引擎,内部实现也不一样。主要是针对两种类型的存储引擎:支持事务的存储引擎(如InnoDB)和不支持事务的存储引擎(如MyISAM),下面分别看看这两种存储引擎的实现: ...
    99+
    2024-04-02
  • Cassandra的数据一致性怎么保证
    Cassandra使用了一种称为“最终一致性”的数据一致性模型来保证数据一致性。在这种模型下,不同节点之间的数据可能会出现短暂的不一...
    99+
    2024-05-11
    Cassandra
  • redis怎么保证数据一致性
    一般来说,只要你用到了缓存,不管是Redis还是memcache,就可能会涉及到数据库缓存与数据的一致性问题,这里我们以Redis为例。我们该如何保证Redis与数据库的一致性呢? So easy: (推荐...
    99+
    2017-04-27
    redis
  • mysql怎么保证数据一致性
    在MySQL中,可以采取以下几种方式来保证数据的一致性:1. 使用事务:事务可以将一系列操作单独的执行单元,要么全部成功提交,要么全...
    99+
    2023-09-15
    mysql
  • canal怎么保证数据一致性
    canal可以通过以下方式来保证数据一致性: 基于事务日志解析:canal通过解析数据库的事务日志来获取数据变更的信息。由于数据...
    99+
    2023-10-22
    canal
  • Java中怎么保证缓存一致性
    这篇文章主要介绍“Java中怎么保证缓存一致性”,在日常操作中,相信很多人在Java中怎么保证缓存一致性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中怎么保证缓存一致性”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • MySQL保证数据一致性的方式
    这篇文章主要讲解了“MySQL保证数据一致性的方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL保证数据一致性的方式”吧!一、MySQL事务模型A...
    99+
    2024-04-02
  • rabbitmq如何保证数据的一致性
    RabbitMQ 通过以下方式来保证数据的一致性: 事务: RabbitMQ 支持事务机制,可以将多条消息发送到队列中原子操作。...
    99+
    2023-10-26
    rabbitmq
  • Cassandra如何保证数据的一致性
    Cassandra 通过以下几种方法来保证数据的一致性: Quorum Consistency Level:Cassandra ...
    99+
    2024-04-09
    Cassandra
  • ​怎么保证Redis和数据库的一致性
    怎么保证Redis和数据库的一致性?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一般来说,只要你用到了缓存,不管是Redis还是memca...
    99+
    2024-04-02
  • rabbitmq怎么保证消息的顺序一致性
    RabbitMQ本身并不保证消息的顺序一致性。RabbitMQ是一个多线程的消息队列系统,它会根据不同的策略将消息分发给多个消费者进...
    99+
    2023-10-09
    rabbitmq
  • mq怎么保证消息的顺序一致性
    保证消息的顺序一致性是消息队列(MQ)中一个重要的问题。下面是几种常用的方法来解决这个问题:1. 单个消费者:只有一个消费者的情况下...
    99+
    2023-10-12
    mq
  • 怎么保证mq消息的顺序一致性
    要保证MQ消息的顺序一致性,可以采取以下几种方式:1. 使用单个消息队列:将所有需要保持顺序的消息发送到同一个消息队列中。这样可以确...
    99+
    2023-10-20
    mq
  • Cassandra中是怎么保证数据一致性的
    Cassandra 使用了一种称为 “分布式一致性” 的模型来保证数据一致性。在 Cassandra 中,数据被分布在多个节点上,每...
    99+
    2024-04-02
  • 高并发怎么保证数据一致性
    使用redis本身的原子性操作库储存。// redis会返回操作之后的结果,这个过程是原子性的Long currStock = redisTemplate.opsForHash().increment...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作