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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 企业运维训练营之数据库原理与实践—云数据库备份与恢复—数据库备份恢复原理(上)

二、 数据库备份恢复原理

 

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

相关文章
|
12天前
|
机器学习/深度学习 人工智能 运维
企业内训|LLM大模型在服务器和IT网络运维中的应用-某日企IT运维部门
本课程是为某在华日资企业集团的IT运维部门专门定制开发的企业培训课程,本课程旨在深入探讨大型语言模型(LLM)在服务器及IT网络运维中的应用,结合当前技术趋势与行业需求,帮助学员掌握LLM如何为运维工作赋能。通过系统的理论讲解与实践操作,学员将了解LLM的基本知识、模型架构及其在实际运维场景中的应用,如日志分析、故障诊断、网络安全与性能优化等。
36 2
|
27天前
|
缓存 算法 关系型数据库
Mysql(3)—数据库相关概念及工作原理
数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
45 5
Mysql(3)—数据库相关概念及工作原理
|
4天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
14 2
|
28天前
|
SQL 关系型数据库 数据库
SQL数据库:核心原理与应用实践
随着信息技术的飞速发展,数据库管理系统已成为各类组织和企业中不可或缺的核心组件。在众多数据库管理系统中,SQL(结构化查询语言)数据库以其强大的数据管理能力和灵活性,广泛应用于各类业务场景。本文将深入探讨SQL数据库的基本原理、核心特性以及实际应用。一、SQL数据库概述SQL数据库是一种关系型数据库
29 5
|
28天前
|
运维 Prometheus 监控
运维中的自动化实践每月一次的系统维护曾经是许多企业的噩梦。不仅因为停机时间长,更因为手动操作容易出错。然而,随着自动化工具的引入,这一切正在悄然改变。本文将探讨自动化在IT运维中的重要性及其具体应用。
在当今信息技术飞速发展的时代,企业对系统的稳定性和效率要求越来越高。传统的手动运维方式已经无法满足现代企业的需求。自动化技术的引入不仅提高了运维效率,还显著降低了出错风险。本文通过几个实际案例,展示了自动化在IT运维中的具体应用,包括自动化部署、监控告警和故障排除等方面,旨在为读者提供一些实用的参考。
|
29天前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
|
29天前
|
SQL 存储 Java
sql注入原理与实战(二)数据库原理
sql注入原理与实战(二)数据库原理
|
2月前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
164 3
|
2月前
|
运维 监控 安全
高效运维管理:提升企业IT系统稳定性与性能
在当今信息化时代,高效的运维管理对于企业IT系统的稳定性和性能至关重要。本文将探讨如何通过优化运维流程、引入自动化工具和建立完善的监控体系等措施,实现高效运维管理,从而提升企业的核心竞争力。
|
23天前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
45 4

热门文章

最新文章