[MySQL]事务原理之redo log,undo log

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: [MySQL]事务原理之redo log,undo log

🌈键盘敲烂,年薪30万🌈



  • 👀再来一遍ACID

1. 原子性:原子性确保事务作为一个整体执行,要么全部执行成功,要么全部不执行。

2. 一致性:一致性确保事务将数据库从一个状态转换为另一个状态。

3. 隔离性:隔离性确保并发执行的多个事务互相隔离。

4. 持久性:事务一旦提交,其修改将永远保存在数据库中。

一、log日志文件

📕 事务执行流程
  • 为什么会有日志❓

先说结论:

   数据库日志的存在是为了确保事务的持久性,支持故障恢复和并发控制,并提供回滚、撤销以及备份和恢复的功能。日志记录了对数据库的操作,使得数据库系统能够有效地管理数据的修改和恢复。

  • 确保持久性❓ 难道没有日志事务提交后可能出现数据不一致❓

分析:

   执行事务->判断内存中有无数据->(加载磁盘数据到内存)->事务提交->日志保存到磁盘

问题1:刷新数据时机?

   系统会根据负载情况和性能优化的考虑来决定脏数据刷新的时机和方式。

问题2:为什么不能提交完事务,直接将Buffer Pool数据保存到磁盘文件?

   我们平时操作的数据库都是随机的,也就意味着随机访问磁盘文件,这会大量占用I/O,性能很低。但是,日志是以追加的方式写入,是顺序访问磁盘文件,性能高的很。

WAL机制:

Writer - Ahead - Logging: 先记录日志在刷新脏数据

小结:

了解了事务的执行流程在看日志就比较简单了,无非就是两种记录方式。

📕 redo log
  • 重做日志,记录事务提交时对数据页的操作,从而实现事务的持久性。

redo log buffer:内存中的数据库数据。

redo log file:磁盘中的数据库数据。


📕 undo log

又称回滚日志,用于记录被修改前的信息,作用有两个,回滚事务,MVCC。它可以保障事务的原子性

注意:

Undo log记录的数据是反向的,比如执行一条delete语句,undo log保存一条insert语句,回滚就是读取undo log中的sql语句,再比如执行update语句,undo log会保存update前的数据库状态。

Undo log销毁:事务提交后不会立刻销毁日志,因为这些日志可能用于MVCC

Undo log存储:采用段的方式进行管理和记录(这里不太懂)

二、总结

redo log保证了事物的持久性

undo log保证了事务的原子性

redo log + undo log保证了事务的一致性

MVCC+锁保证了事务的隔离性(下一篇)

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
MySQL锁机制:并发控制与事务隔离
本文深入解析了MySQL的锁机制与事务隔离级别,涵盖锁类型、兼容性、死锁处理及性能优化策略,助你掌握高并发场景下的数据库并发控制核心技巧。
|
3月前
|
存储 监控 Oracle
MySQL事务
MySQL事务具有ACID特性,包括原子性、一致性、隔离性和持久性。其默认隔离级别为可重复读,通过MVCC和间隙锁解决幻读问题,确保事务间数据的一致性和并发性。
MySQL事务
|
4月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
1月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的事务隔离级别
数据库并发访问时易引发数据不一致问题。如客户端读取到未提交的事务数据,可能导致“脏读”。MySQL通过四种事务隔离级别(读未提交、读已提交、可重复读、可序列化)控制并发行为,默认为“可重复读”,以平衡性能与数据一致性。
241 0
|
2月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
133 0
|
4月前
|
安全 关系型数据库 MySQL
mysql事务隔离级别
事务隔离级别用于解决脏读、不可重复读和幻读问题。不同级别在安全与性能间权衡,如SERIALIZABLE最安全但性能差,READ_UNCOMMITTED性能高但易导致数据不一致。了解各级别特性有助于合理选择以平衡并发性与数据一致性需求。
180 1
|
7月前
|
数据库 文件存储 数据安全/隐私保护
YashanDB redo日志文件管理
YashanDB的redo日志文件用于记录数据库物理日志,支持宕机重演和主备复制。 redo日志有4种状态:NEW(新创建)、CURRENT(当前写入)、ACTIVE(未归档或未写盘)和INACTIVE(可复用)。可通过V$LOGFILE视图或直接查看$YASDB_DATA/dbfiles目录来管理redo日志。此外,支持添加、切换和删除redo日志以优化性能或应对磁盘故障等情况,但需注意仅能删除INACTIVE或NEW状态的日志以确保数据安全。
|
8月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
1062 0
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
133 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多