MySQL系列: undo和redo工作原理

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: MySQL系列: undo和redo工作原理

ACID

首先来讨论事务的四大特性ACID

  • 原子性(Atomicity):事务作为一个整体来执行,要不都执行,要不都不执行
  • 一致性(Consistency):事务必须保证数据库从一个一致状态转移到另一个一致状态。不能破坏关系数据的完整性以及业务逻辑的一致性。

完整性一般就是数据的域完整性、实体完整性以及参照完整性。域完整性始址我们在创建表的时候指定的数据类型,输入限制。实体完整性规定我们的记录必须唯一,也就是说一个记录中必须存在一个或者多个字段唯一标示这一条记录。参照完整性则一般对应于关系表之间的关系,保证主键和外键之间的参照关系。不能因为执行事务儿破坏数据的完整性。


逻辑业务一致性举个例子。再银行转账操作中,a、b初始值1000,a像b转100,但是不能因为我们的事务操作使得b只收到了50。事务要保证业务操作中我们的业务一致性不能乱。

  • 隔离性(Isolation):多个事务并发的时候,一个事务执行的时候不会影响另一个事务。
  • 持久性(Durability):已被提交的事务必须保存再数据库中。

 

Undo(历史数据,提交前持久化,修改前写入,保证原子性)

undo日志到底做了什么

undo日志会记录事务执行过程中,每次修改的数据的原始值。

x =5,y  = 8
t1 begin:
  //undo日志记录x=5
  x = x- 1;
  //undo日志记录y=8
  y = y-2;
  //事务执行临近结束,将undo日志写入到磁盘
  //将数据写入到磁盘
commit

我们都知道,事务是具有原子性的要不全做,要不全部做。可到底是什么机制协助了数据库


undo日志就可以保证数据库事务操作的原子性,从上面的流程我们可以得知每次进行事务修改之前,都会吧未修改之前的值存储到undo日志中,当然再提交的时候也是先将undo写到磁盘,再把修改后的数据写到磁盘。倘若再undo写入磁盘之前发生了异常,根本就不需要做任何操作,这时候事务是被认为执行失败的,也不需要回滚,因为undo日志没有写入磁盘,数据库被认为处于没有执行事务的状态。若再数据写入磁盘的时候发生故障,则可以根据undo日志进行回滚。

整个过程下来起码实现了原子性以及持久性

undo操作的特点总结如下:

  1. 在更新数据前把数据记录到undo操作
  2. 持久性,只要数据提交则必定保存到了数据库
  3. undo log必须先于数据持久化到磁盘,这样的话若数据写入磁盘或者进行commit是出错,可以根据undo日志进行回滚
  4. 若事务再undo持久化之前出错,则数据库中的数据还保持在事务之前的状态。undo日志中也没有相应的记录,不需要回滚

当然undo的缺陷也很明显,他需要提交一次undo日志到磁盘,和一次数据到磁盘。io次数过多,性能太低。

Redo(新数据,提交前持久化,修改后写入,保证持久性)

redo的出现

为了解决undo性能过低的问题,就引入了redo

redo与undo正相反,他记录的是新数据的备份。并且事务在提交的时候只需将redo日志持久化到磁盘即可,数据可以根据redo日志异步的持久到磁盘。当发生异常的时候,只要redo

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
自然语言处理 搜索推荐 关系型数据库
MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享
本文介绍了在文档管理系统中实现高效全文搜索的方案。为解决原有ES搜索引擎私有化部署复杂、运维成本高的问题,我们转而使用MySQL实现搜索功能。通过对用户输入预处理、数据库模糊匹配、结果分段与关键字标红等步骤,实现了精准且高效的搜索效果。目前方案适用于中小企业,未来将根据需求优化并可能重新引入专业搜索引擎以提升性能。
600 5
|
9月前
|
SQL 关系型数据库 MySQL
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
780 5
图解MySQL【日志】——Redo Log
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
314 16
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
230 4
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
1585 0
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
484 158
|
7月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1188 152

推荐镜像

更多