企业运维训练营之数据库原理与实践—云数据库备份与恢复—数据库备份恢复原理(下)

简介: 企业运维训练营之数据库原理与实践—云数据库备份与恢复—数据库备份恢复原理(下)

接上篇:https://developer.aliyun.com/article/1224053?groupCode=supportservice


二、 数据库备份恢复原理

 

image.png

 

Xtrabackup备份流程如下:

 

首先,备份开始时会Fork一个进程,也会启动redo拷贝线程。拷贝时会监听redo log变换并写到xtrabackup log文件中,拷贝InnoDB引擎的文件。InnoDB数据拷贝完成,线程退出。

 

后续如果有非事务性引擎,需要为全局加FTWRL锁保证一致。全局备份完成后,通知redo拷贝线程停止并退出,执行unlock,全部执行完毕之后退出。

 

备份文件时,事务型引擎只需拷贝redo文件,但非事务型引擎表没有事务保证,也没有log,因此需要FTWRL锁来保证所有数据一致。

 

以上为2.4版本的流程,后续版本使用了lock table with fullbackup这样轻量级的锁,不再有全局锁定。

 

FTWRL主要的工作包括:备份非事务性引擎表,获取binlog位点、GTID、redo log、LSN、redo log刷盘。

 

增量备份时,会先找到上次备份的to_lsn,从此处开始备份增量数据,增量数据即binlog。

 

image.png

 

快照备份是基于存储或文件系统,不同类型的快照有不同的技术,本文主要介绍copy-on-write的原理。

 

首先,发起快照备份时,只需初始化指向于所有数据块元数据的指针。跟踪元数据变化,在覆盖之前将旧数据拷贝到预留的快照空间,更新快照指针到新快照卷中的数据即可。

 

数据更新后将数据拷贝到另外的地方,指针会随之更改。读取时,没有变更的数据从原先的地方读取,变动的数据从快照卷中读取,只需读取指针即可。

 

该方式的优势在于,如果数据不更新,则空间开销特别小;备份时只需创建指针,速度极快;持续时间短,也不存在其他锁,因此影响小。缺点在于,每次数据更新时都会将数据再复制一份到预留的快照卷中,因此对写入性能有轻微影响。

 

image.png

 

恢复到任意时间点的流程如下:

 

找到恢复时间点前最近的一个全量备份集,将全量备份集还原至新数据库,再应用binlog增量数据直到指定的时间点。Binlog里的标识位点有position、datetime、GTID等帮助恢复到任意时间点。

 

image.png

 

三种备份方式的对比:

 

备份对象:逻辑备份更精细,可以自定义表、库或某一条数据、某个条件字段的数据;物理备份为数据库实例以及DB级别,快照备份为数据库实例级别。

 

备份效率:逻辑备份最慢,需要经过MySQL Server层到存储引擎层将数据读出再存储;物理备份比较快,只需要拷贝文件,额外操作较小;快照备份最快,因为基于存储,无需拷贝很多数据,只需生成快照指针。

 

恢复效率:逻辑备份需要将备份出的一条条数据应用到其他库中,因此执行特别慢;而物理备份只需做recover,备份恢复很快;快照备份只需在存储里进行,只需要做快照指针转化,因此恢复速度也很快。

 

备份影响:逻辑备份执行时间很长,开销很大,不仅有锁,还存在CPU等资源抢占,因此影响最大。物理备份和快照备份影响较小。

 

备份数据量:逻辑备份不会有数据碎片,因此比原库更小;物理备份与原库一致;而快照备份最小,因为只需要预留快照卷,保留更新数据的前镜像即可。

 

兼容性:逻辑备份可以恢复到绝大部分存储引擎;物理备份依赖于数据库版本架构,需要保持一致才可以存储;快照备份依赖于存储或文件系统,但是当前云上提供了下载快照备份的功能,可以将快照进行转换之后下载。

 

操作复杂性:逻辑备份最简单,只需要一个命令或简单的SQL;物理备份比较复杂,不同的工具会有很多参数,并且非常依赖于目标库的环境;快照备份原理比较复杂,但因为基于存储提供了现成的能力,因此操作较为简单。

 

数据库规模推荐范围:逻辑备份一般建议MB到百GB级别,大于该范围的开销过大,不推荐;物理备份是主流的备份方式,最大可到TB级别;快照备份推荐云盘版实例,是云盘最高效与稳定的一种方式。

相关文章
|
2月前
|
消息中间件 Kafka 数据库
深入理解Kafka的数据一致性原理及其与传统数据库的对比
【8月更文挑战第24天】在分布式系统中,确保数据一致性至关重要。传统数据库利用ACID原则保障事务完整性;相比之下,Kafka作为高性能消息队列,采用副本机制与日志结构确保数据一致性。通过同步所有副本上的数据、维护消息顺序以及支持生产者的幂等性操作,Kafka在不牺牲性能的前提下实现了高可用性和数据可靠性。这些特性使Kafka成为处理大规模数据流的理想工具。
47 6
|
3月前
|
存储 SQL 关系型数据库
(六)MySQL索引原理篇:深入数据库底层揭开索引机制的神秘面纱!
《索引原理篇》它现在终于来了!但对于索引原理及底层实现,相信大家多多少少都有了解过,毕竟这也是面试过程中出现次数较为频繁的一个技术点。在本文中就来一窥`MySQL`索引底层的神秘面纱!
237 5
|
3月前
|
SQL 存储 安全
SQL数据库:核心原理、应用实践与未来展望
在电子商务领域,SQL数据库用于存储商品信息、用户信息、订单信息等。通过SQL数据库,电商平台可以实现商品的快速检索、用户行为的跟踪分析、订单状态的实时更新等功能,提升用户体验和运营效率。
|
2月前
|
存储 NoSQL 关系型数据库
Web中的数据库:原理、应用与代码实现
Web中的数据库:原理、应用与代码实现
|
2月前
|
SQL 数据库
SQL Server 还原 备份集中的数据库备份与现有的 'XXX' 数据库不同
SQL Server 还原 备份集中的数据库备份与现有的 'XXX' 数据库不同
31 0
|
3月前
|
SQL Java 关系型数据库
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
52 0
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
20天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
160 11
|
15天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
58 13
MySQL的安装&数据库的简单操作
|
21天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
下一篇
无影云桌面