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试了让从库能准确复现主库的业务操作

相关推荐
fie888920 小时前
基于MATLAB的时变Copula实现方案
开发语言·matlab
冬奇Lab20 小时前
【Kotlin系列12】函数式编程在Kotlin中的实践:从Lambda到函数组合的优雅之旅
android·开发语言·kotlin
消失的旧时光-194320 小时前
第六课 · 6.1 从 JDBC 到 MyBatis:SQL 工程化是如何发生的?
java·sql·mybatis
写代码的【黑咖啡】20 小时前
Python中的Msgpack:高效二进制序列化库
开发语言·python
Jaxson Lin20 小时前
Java编程进阶:线程基础与实现方式全解析
java·开发语言
夜喵YM20 小时前
基于 Spire.XLS.Free for Java 实现无水印 Excel 转 PDF
java·pdf·excel
xiaoqider20 小时前
C++继承
开发语言·c++
茶本无香20 小时前
设计模式之五—门面模式:简化复杂系统的统一接口
java·设计模式
阿华hhh20 小时前
day4(IMX6ULL)<定时器>
c语言·开发语言·单片机·嵌入式硬件
她说可以呀20 小时前
网络基础初识
java·网络·java-ee