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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 企业运维训练营之数据库原理与实践—云数据库备份与恢复—数据库备份恢复原理(上)

二、 数据库备份恢复原理

 

image.png

 

进行逻辑备份时会涉及很多库表,比如备份a表时花费10秒钟,而开始备份b表时已经是10秒钟以后的数据,会导致数据不一致。此类问题如何解决?

 

MySQL能够通过事务与各种日志保证数据一致性。

 

MySQL的主流引擎是InnoDB,是一个事务型引擎。事务的4个特性为原子性、一致性、隔离性与持久性,以上四个特性能够完整描述出事务的样子。事务有两个状态,分别为成功或失败,失败后可以回滚。事务与事务之间互相隔离,不同的隔离级别看到的数据会略有不同。事务提交后,不管发生宕机或其他事件,数据都需要能够保存在磁盘上。而一致性主要通过其他三种特性共同保证。

 

事务4个特性的实现主要依靠3个日志文件:

 

Redo log:记录数据更新后的值。保证能够落盘,因此可以用来恢复未写入data file的已成功事务更新的数据。原先的存储大多使用随机IO,而Redo log使用顺序IO,速度可以得到大幅提升。同时,原先的存储数据分布非常零散,更新几个列值需要多次IO,而顺序IO的场景下能够大幅减少IO次数。综上,Redo log的目的主要有保证数据的持久性以及提升速度。

 

Undo log:记录数据被更新前的镜像值,保证数据能够回滚。主要用于事务多版本并发控制以及原子性。

 

Binlog:Binlog存在于 server 层,会记录所有提交的DML与DDL,用于做主从复制、数据恢复或同步。为了保证binlog数据的一致性,MySQL采用2阶段提交。

 

以下举例说明Redo与Undo之间的关系。假设a、b两个数据值都为500,a减100、b加100的事务行为如下:

 

首先,事务开始,记录a=500到Undo log。修改为a=400,并记录到Redo log。事务的写流程都为先写Undo log再写Redo log,因此后续流程为记录b=500到Undo log,记录b=600到Redo log,最终事务提交。LSN是日志序列号,用于记录数据库里面数据的一致性位置,主要存在于data buffer和redo buffer。

 

事务提交之后即落盘,但是在如果在提交过程中发生了crash,数据库会做recover,先前滚,再回滚,流程如下:

 

确定恢复起点checkpoint_LSN,然后对比LSN号,应用redo log中最新的日志文件数据,达到crash前一刻状态。最后对prepare状态事务进行回滚,数据状态恢复正常。这也是两阶段事务提交的具体逻辑。

 

上图右侧为MySQL内存与磁盘的结构。

 

image.png

 

逻辑备份是数据库层面对象级别的备份,主流工具有mysqldump、Mysqldumper(mysqldump的多线程版本)。

 

物理备份是文件系统层面,比如简单的cp、Rsync、XtraBackup、CDM。

 

快照备份是基于存储或文件系统,不同厂商会有很多类似的工具。

 

image.png

 

我们准备了两个数据库,分别是test2021与test2022,里面分别有两个表。对两个库进行逻辑备份。

 

image.png

 

上图为具体备份流程。首先会对结构进行备份,然后将数据转换成SQL的方式,执行SQL与DDL。

 

image.png

 

上图中32 Init DB test2022表示开始备份test2022库。首先,将t1表和test_user表上锁,不允许写。备份完成后,将两个表解锁,然后开始进行test2021库的备份。

 

上述流程存在两个问题

 

首先,备份时不能写入

其次,先对a库进行备份,完成后再对b库进行备份。假设a库备份花费10分钟,则b库的数据是 10 分钟之后的数据,会存在不一致的问题。

 

image.png

 

single-transaction参数解决了一致性问题与锁问题。

 

上图流程可见,首先设置了rr的隔离级别,能够解决换读问题。Start transaction 表示开启了一致性快照,通过事务方式读取数据,保证了数据的一致性。

 

image.png

 

上图可见,备份时并没有加锁,只是通过事务来保证一致性。

 

master-data主要用于获取Binlog位置,搭建主从关系时使用。

 

image.png

 

Flush tables with read lock表示对整个库加了只读锁,再设置为rr隔离级别,开启一致性读事务。做完show master status后,进行unlock,然后进行备份流程。

 

single-transaction利用事务机制保证一致性。而如果数据库里有非事务引擎表,我们提供了lock-all-tables参数用于锁定所有表,以保证一致性。该参数日常使用较少,因为会造成比较大的影响。因此,云上库不支持myisam 引擎表。运维或设计时,建议尽量使用事务性引擎表。


接下篇:https://developer.aliyun.com/article/1224054?spm=a2c6h.13148508.setting.19.7b3f4f0enhBQlF

相关文章
|
5月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
6月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
606 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
6月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
298 8
|
8月前
|
人工智能 运维 数据挖掘
瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
阿里云瑶池数据库重磅推出“Data+AI能力家族”,包括DTS AI数据准备、Data Agent系列智能体及DMS MCP统一数据访问服务,重构数据与AI协同边界。通过智能化工具链,覆盖数据全生命周期,提升企业数据开发、分析、治理与运维效率,降低技术门槛,激活数据资产价值,助力企业迈向全栈智能新时代。
|
9月前
|
人工智能 运维 数据挖掘
瑶池数据库开放日:全新发布Data+AI能力家族,赋能企业全栈智能实践
近日,阿里云瑶池数据库生态工具产品重磅升级,推出“Data+AI能力家族”,并举办了为期3天的全栈智能实践开放日活动。发布会上首次公开了 “Data Agent for Analytics、Data Agent for Meta、DAS Agent”等瑶池数据库Data Agent系列能力,以工具智能化 × 智能化工具的双引擎重构数据与AI的协同边界,揭秘AI时代数据价值释放的全新路径。
|
存储 SQL BI
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
2202 1
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
|
存储 运维 5G
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
数据是 5G 全连接工厂的核心要素,为支持全方位的数据收集、存储、分析等工作的高效进行,联通 5G 全连接工厂从典型的 Lambda 架构演进为 All in [Apache Doris](https://c.d4t.cn/vwDf8R) 的实时/离线一体化架构,并凭借 Doris 联邦查询能力打造统一查询网关,数据处理及查询链路大幅简化,为联通 5G 全连接工厂带来数据时效性、查询响应、存储成本、开发效率全方位的提升。
1373 4
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案

热门文章

最新文章