登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
安全
›
一文彻底弄懂mysql的事务日志,undo log 和 redo log ...
一文彻底弄懂mysql的事务日志,undo log 和 redo log
[ 复制链接 ]
虹姥
2025-6-10 15:35:24
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
在数据库事务管理中,
Undo Log
和
Redo Log
是两种关键日志,用于保障事务的
原子性
和
持久性
。它们的作用是确保数据库在出现崩溃、断电、宕机等故障时,能够进行恢复操作,从而保障数据一致性和完整性。它们通常用于支持事务的
ACID
特性中的
原子性
和
持久性
。下面将分别介绍
Undo Log
和
Redo Log
的原理、实现机制、以及它们的作用。
一、Undo Log
Undo Log
是回滚日志,它的作用是在事务发生异常或主动回滚时,用于撤销已执行的操作,确保数据库数据能够回到事务开始前的状态,保证事务的
原子性
。
1. 工作原理
作用
:Undo Log 记录了在事务执行过程中对数据的每次修改前的数据副本(即修改前的旧值),这些旧值在回滚时用于恢复到数据的原始状态。
事务开始时
:事务执行过程中,每当进行写操作(如 INSERT、UPDATE、DELETE)时,数据库会将修改前的记录保存在 Undo Log 中。
回滚时
:如果事务回滚,系统会通过 Undo Log 将这些记录回滚至修改之前的状态,从而实现撤销操作。
例如:
如果执行了一条 UPDATE 操作,事务会记录修改前的数据值。
如果事务最终失败或主动执行了回滚(ROLLBACK),数据库会使用 Undo Log 将被更新的数据恢复到原始值。
2. Undo Log 的实现
逻辑日志
:Undo Log 是一种逻辑日志,记录的是逻辑上的修改操作。它并不会直接记录每次操作的物理存储修改,而是记录修改前的数据。
链表结构
:InnoDB 存储引擎会为每条记录维护一条 Undo Log 记录,并以链表的方式串联起来。如果事务需要回滚,MySQL 会沿着 Undo Log 链表进行逐条回滚,直到恢复到事务开始时的状态。
Undo Log 的类型
:
对于 INSERT 操作,Undo Log 记录的是“删除”操作,因为如果事务回滚,需要撤销插入的数据。
对于 DELETE 操作,Undo Log 记录的是“插入”操作,用来恢复被删除的数据。
对于 UPDATE 操作,Undo Log 记录的是修改前的旧值,用来恢复原来的值。
3. 使用场景
事务回滚
:当事务执行失败或用户显式要求回滚时,Undo Log 会将所有修改的数据恢复到事务开始前的状态。
MVCC(多版本并发控制)
:Undo Log 也用于实现 MVCC 机制。不同事务可能在不同时间看到不同版本的数据,这些版本的数据就是由 Undo Log 提供的。这样,未提交的事务修改对其他事务是不可见的,帮助实现隔离性。
4. 示例
假设有一条 UPDATE 语句:UPDATE user SET balance = balance + 100 WHERE id = 1;。在修改 balance 之前,数据库会将 id = 1 用户的原始 balance 值存储在 Undo Log 中。如果事务回滚,系统会从 Undo Log 中恢复 balance 的原始值。
二、Redo Log
Redo Log
是重做日志,主要用于恢复已经提交的事务,确保数据库的
持久性
(Durability)。当数据库发生崩溃时,Redo Log 可以帮助恢复已经提交但尚未写入磁盘的数据。
1. 工作原理
作用
:Redo Log 记录的是对数据库的物理层面的修改,确保当系统崩溃时,已经提交的事务所做的修改不会丢失。通过 Redo Log,MySQL 能够在崩溃后重做已提交事务的修改,保证事务的持久性。
事务提交时
:当事务提交时,MySQL 并不会立即将所有数据刷新到磁盘(因为磁盘 IO 较慢),而是先将修改内容记录到 Redo Log 中,之后再异步地将数据写入磁盘。
例如:
在执行一条 INSERT、UPDATE 或 DELETE 操作时,数据库会先将修改记录写入 Redo Log。当事务提交时,系统会将 Redo Log 刷入磁盘,保证数据不会丢失。
即使数据库此时宕机,数据页尚未持久化,但因为有 Redo Log,系统可以在重启后重新应用日志,恢复已提交的事务。
2. Redo Log 的实现
物理日志
:Redo Log 是物理日志,记录的是物理数据页的更改,而不是 SQL 操作或逻辑操作。它记录了数据库物理块的变更,比如某个数据页上某条记录的修改。
WAL(Write-Ahead Logging)机制
:InnoDB 采用 WAL 机制,即
先写日志,再写磁盘
。每次事务提交时,InnoDB 会将 Redo Log 先写入磁盘,而后再慢慢将实际修改的数据写入磁盘。
循环写机制
:Redo Log 采用固定大小的循环写机制。当日志写满时,会从头开始重新写。因此,在系统运行时,InnoDB 会定期将日志应用到数据页,并将脏页(即被修改但还未写入磁盘的数据页)刷新到磁盘。
3. Redo Log 的使用场景
崩溃恢复
:当数据库崩溃后,通过重启,MySQL 可以根据 Redo Log 恢复所有已提交的事务。这是 MySQL 保证事务持久性的关键机制。
提高性能
:因为 Redo Log 可以先于数据页写入磁盘,数据库无需每次事务提交时都立即写入数据页,从而显著提高了写操作的性能。数据页的写入可以在稍后的时间由后台线程异步完成。
4. 示例
假设执行一条 UPDATE 语句:UPDATE user SET balance = balance + 100 WHERE id = 1;。当事务提交时,MySQL 会将修改后的 balance 值写入 Redo Log,并将 Redo Log 刷入磁盘。如果系统在修改完成后立刻崩溃,虽然数据页未刷新,但 MySQL 可以通过 Redo Log 在重启时恢复提交的事务。
三、Undo Log 和 Redo Log 的区别
对比项
Undo Log
Redo Log
作用
记录数据的旧值,用于回滚事务记录数据的修改,用于恢复已提交的事务
日志类型
逻辑日志,记录逻辑操作物理日志,记录数据页的物理修改
实现机制
链表结构,逐条回滚固定大小的循环写机制,WAL 策略
使用场景
事务回滚、多版本并发控制(MVCC)崩溃恢复、保证数据持久性
何时写入磁盘
修改数据时记录,但无需立即写入磁盘事务提交时必须写入磁盘
涉及的 ACID 特性
原子性、隔离性持久性
四、总结
Undo Log
保证了事务的
原子性
和
隔离性
,在事务回滚和多版本并发控制(MVCC)中起到关键作用。
Redo Log
保证了事务的
持久性
,在系统崩溃后可以恢复已提交的事务操作,确保数据一致性。
在实际的业务系统中,Undo Log 和 Redo Log 是支撑 MySQL 数据库事务和恢复机制的基础。Undo Log 主要用于撤销未完成或回滚的事务操作,而 Redo Log 则用于保证已提交的事务在系统崩溃时能够得到恢复。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
log
一文
彻底
弄懂
mysql
相关帖子
收藏!LLM开发全链路:5大步骤+15大框架,从数据治理到RLHF一文通关
除了MySQL,这 9 种数据库你竟然都不认识?
一文入门 Android NDK 开发
如何保证mysql与redis双写一致性
7个神级技巧,彻底去除网站的 AI 味儿!
推荐一款封边机,一文带你看明白封边机怎么选
MySQL MGR自动化安装工具,支持单主和多主
MySQL 5.6 2000 万行高频读写表新增字段实战:从慢执行到无锁落地全解析
【面试题】MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
PLG log server note
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
收藏!LLM开发全链路:5大步骤+15大框架,从数据治理到RLHF一文通关
4
6
抽厉
2026-01-26
安全
除了MySQL,这 9 种数据库你竟然都不认识?
0
4
怀陶宁
2026-01-26
业界
一文入门 Android NDK 开发
5
472
赏勿
2026-01-28
业界
如何保证mysql与redis双写一致性
1
766
户烫擞
2026-01-30
业界
7个神级技巧,彻底去除网站的 AI 味儿!
0
910
仰翡邸
2026-01-30
安全
推荐一款封边机,一文带你看明白封边机怎么选
2
984
司马黛
2026-01-30
业界
MySQL MGR自动化安装工具,支持单主和多主
2
469
忿媚饱
2026-02-02
业界
MySQL 5.6 2000 万行高频读写表新增字段实战:从慢执行到无锁落地全解析
1
643
乐敬
2026-02-02
业界
【面试题】MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
2
991
向梦桐
2026-02-02
业界
PLG log server note
0
746
胥望雅
2026-02-03
回复
(23)
梅克
2025-10-18 08:31:17
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
龙正平
2025-11-14 10:45:57
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
仰翡邸
2025-11-28 06:40:28
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
孟清妍
2025-12-8 22:41:12
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
决台
2025-12-24 22:53:20
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
巫雪艷
2025-12-27 16:48:55
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
吕颐然
2026-1-4 17:49:20
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
采序
2026-1-18 14:10:07
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个有用。
全阳霁
2026-1-18 20:42:09
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
晦险忿
2026-1-19 09:32:48
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
韩素欣
2026-1-20 00:47:34
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
卿搞笔
2026-1-20 17:09:55
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
国语诗
2026-1-20 18:07:06
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个有用。
桂册
2026-1-21 01:28:31
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
皮仪芳
2026-1-22 11:19:38
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
篙菠
2026-1-23 08:51:53
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
府扔影
2026-1-25 17:09:10
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
巫雪艷
7 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
决台
7 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
虹姥
7 天前
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
宋子
9937
6
韶又彤
9952
7
闰咄阅
9993
8
刎唇
9995
9
蓬森莉
9919
10
俞瑛瑶
9998
查看更多
今日好文热榜
748
wangeditor5自定义扩展设置图片宽高(px)
844
spring6-工厂设计模式与bean的实例化方式
778
字符编码知多少(二)
662
LLVM Pass快速入门(三):指令替换
5
天翼云全栈赋能OpenClaw,打造会干活的专属
623
DeepK 自动程序修复框架论文——OceanBase
16
再谈模拟退火
33
《让子弹飞》之"插入排序办公室"风云
798
Qt 技巧笔记 (五) Qt消息框(QMessageBox)
653
3台服务器扩展到100台,如何避免数据大迁移
607
最新!银河麒麟v11 kubeadm部署k8s v1.35.0
333
asp.net core如何实现Controller热更新
562
独立站卖家提升转化率的 AI 直播解决方案—
746
PLG log server note
361
快速上手Vibe Coding:10 分钟做出你的第一
170
深度权威测评微信编辑器:2026 年公众号排
990
国产大模型适配优选,MonkeyCode 赋能企业
728
国产大模型适配优选,MonkeyCode 赋能企业
792
国产大模型适配优选,MonkeyCode 赋能企业
883
国产大模型适配优选,MonkeyCode 赋能企业