Java常见技术分享-27-事务安全-事务日志-事务日志框架

事务日志的框架

Redo Log (重做日志-InnoDB存储引擎层)

它记录的是数据修改的"动作", 这样数据提交后 如果还没来得及写入磁盘, 崩溃了, 重启后就能通过重新执行这些"动作", 把数据恢复到崩溃前的状态, 保证数据提交之后, 数据一定能持久化到磁盘, 不会因为崩溃而消失。

Undo Log (回滚日志- InnoDB存储引擎层)

它记录的是数据修改前的"快照",比如你把数字从1改成2 , undo log 会记录着 "这个位置原来是1 ", 如果数据出错或者要回滚, 就能通过undo log 将数据回滚到数据修改之前的状态。 保证事务执行过程中, 如果出错或者用户执行了rollBack, 能将数据恢复到事务开始前的状态,

BinLog (Mysql层)

它记录了 修改了什么数据, 比如 你把数字从1 改成 2 , 就直接记 把某个位置改成2 。 保证 从库 能准确的复现主库的业务操作 或者进行数据备份。

BinLog 和 Redo Log 的区别

核心区别在于 redo log 是 "物理日志" , 而 BinLog 是 "逻辑日志"。

物理日志, 记录是 在 "哪个数据页上做了什么改动", 就像将 "在第3页第5行的位置, 把数字加1 ", 它更贴近底层的存储结构, 恢复速度非常快。 而 逻辑日志, 记录的是"数据的逻辑变化", 像 "把id =2 的记录加1 ",更偏向业务层面的操作。

虽然最终结果看起来一样, 但是他们记录的角度和用户完全不同。

redo log 是为了让innodb 引擎 在崩溃后能快速恢复数据, 而binlog试了让从库能准确复现主库的业务操作

相关推荐
程序员良辰12 小时前
【TongWeb8】使用 Crontab 定时重启和检测 TongWeb 服务
java·中间件·tomcat
菜冻鱼12 小时前
Python-sklearn-特征工程
开发语言·人工智能·python·机器学习·numpy·matplotlib·sklearn
SL_staff13 小时前
JVS数字底座实践:如何复用企业文档能力快速构建知识类应用
java·数据库·程序员
sugar__salt13 小时前
MyBatis ③动态 SQL 完全指南 —— 从条件拼接到批量操作
java·sql·mybatis
吴声子夜歌13 小时前
正则指引——PHP
开发语言·正则表达式·php
吃饱了得干活13 小时前
Java并发安全:看这一篇就懂了!
java·后端·面试
前端双越老师13 小时前
前端学习 Java 其实很容易:TS 和 Java 语法的 N 个相同点
java·全栈
Claire_8813 小时前
企业文件管理系统选型技术框架与主流产品对比分析
开发语言·php
(Charon)13 小时前
【C++】:使用 mutex + deque 实现一个简单的 LockedQueue
开发语言·c++
星轨初途13 小时前
LeetCode 热题 100——day10 和为 K 的子数组
开发语言·c++·算法·leetcode