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

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

接上篇: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月前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
77 4
|
14天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
35 3
|
14天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
29 3
|
28天前
|
存储 定位技术 数据库
介绍一下数据库的备份和恢复策略
【10月更文挑战第21】介绍一下数据库的备份和恢复策略
|
28天前
|
运维 关系型数据库 MySQL
运维|MySQL 数据库被黑,心力交瘁
前一阵有一个测试用的 MySQL 数据库被黑了,删库勒索的那种,这里记录一下事情经过,给自己也敲个警钟。
35 2
|
13天前
|
数据库
【赵渝强老师】数据库的备份方式
备份数据库是指将数据库中的数据及相关信息保存起来,以便在系统故障时恢复。备份对象不仅限于数据本身,还包括数据库对象、用户权限等。根据备份策略、类型和模式的不同,可分为整体/部分备份、完全/增量备份、一致/非一致备份。文中还附有相关视频讲解。
|
2月前
|
关系型数据库 MySQL 数据库
Navicat备份数据库
涵盖`Navicat`数据库备份、数据安全及备份策略等主题。文库采用精美主题,提升阅读体验。
41 1
Navicat备份数据库
|
2月前
|
SQL 数据库 数据安全/隐私保护
如何手动备份数据库?
如何手动备份数据库?
120 1
|
13天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1
|
15天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
下一篇
无影云桌面