MySQL日志——redolog

redo log(重做日志)

为什么需要redo log?

在mysql提交一个事务后,这个事务所作的数据修改并不会直接保存到磁盘文件中,而是先保存在buffer pool缓冲区中,在需要读取数据时,先从缓冲区中找,没找到再去磁盘找,加之每次提交事务都将数据写入磁盘的效率低下,所以引入了buffer pool缓冲区

也正是因为一个事务的提交并不会立即由磁盘进行持久化,此时mysql故障就会有缓冲区中数据丢失的风险

因此,redo log记录了一个事务对数据页的修改,这个记录与undolog不同,是物理层面的,比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新

提交一个事务后,先将redo log持久化磁盘,就可以保证这个事务修改的数据被持久化了

redo log(重做日志):是 Innodb 存储引擎层生成的日志 ,实现了事务中的持久性 ,主要用于掉电等故障恢复;

作用:

  • redo log 主要用于保证事务的持久性和数据恢复。在事务提交时,redo log 记录了所有修改操作,这些日志可以在数据库崩溃后用来重做(恢复)事务,以保证已提交事务的持久性。

特性:

  • 物理日志:记录的是页级别的物理修改操作。
  • 循环写 :redo log 的大小固定,采用循环写的方式。
  • 持久性保证 :事务在提交时会先写入 redo log 并刷盘,确保即使数据库崩溃也能通过 redo log 恢复已提交的事务。

记录内容:

  • 页号、偏移量、修改前后的数据等。

redo log 和 undo log 区别在哪?

这两种日志是属于 InnoDB 存储引擎的日志,它们的区别在于:

  • redo log 记录了此次事务「完成后 」的数据状态,记录的是更新之后的值;
  • undo log 记录了此次事务「开始前 」的数据状态,记录的是更新之前的值;

事务提交之前发生了崩溃,重启后会通过 undo log 回滚事务,事务提交之后发生了崩溃,重启后会通过 redo log 恢复事务,如下图:

推荐学习 https://xxetb.xetslk.com/s/p5Ibb

相关推荐
余槐i2 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹2 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo2 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人3 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台4 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
Lost_the_wind5 小时前
MySQL学习笔记五
mysql
花间相见6 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见6 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing20236 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip
这个DBA有点耶6 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构