Redo,Undo,Binlog

https://www.jianshu.com/p/d829df873332

https://www.jianshu.com/p/57c510f4ec28

对于面向disk的数据库,

需要把数据先写入到page中,然后成批的flush到磁盘,所以在Page没有flush前需要有log能记录下page的state

这就是Redo,所以Redo是物理的,因为记录的是Page的具体变更,用Redo的目的是恢复出之前的page

Redo本身也是要写disk,每个操作去写也不合适,所以Redo也有个buffer,在事务commit的时候才把Redo顺序写入disk

如果事务已经写入到磁盘,或者对于大事务,可能无法等到commit的时候再flush,这个时候需要rollback

rollback的时候,是需要恢复row的状态,这就需要undo,记录下row在执行事务前的值是什么,所以undo是逻辑的

因为我们只关心的是,undo后,row的值和原来一样,是不是原来的page,这个无法保证,也不重要

至于redo和binlog的区别,我就直接copy上面的了

- 层次不同。redo/undo 是 innodb 引擎层维护的,而 binlog 是 mysql server 层维护的,跟采用何种引擎没有关系,记录的是所有引擎的更新操作的日志记录。
- 记录内容不同。redo/undo 记录的是 每个页/每个数据 的修改情况,属于物理日志+逻辑日志结合的方式(redo log 是物理日志,undo log 是逻辑日志)。binlog 记录的都是事务操作内容,binlog 有三种模式:Statement(基于 SQL 语句的复制)、Row(基于行的复制) 以及 Mixed(混合模式)。不管采用的是什么模式,当然格式是二进制的,
- 记录时机不同。redo/undo 在 事务执行过程中 会不断的写入,而 binlog 是在 事务最终提交前 写入的。binlog 什么时候刷新到磁盘跟参数 sync_binlog 相关

对于面向内存的数据库

情况变了,内存数据库没有page cache

那是不是还需要Redo和Undo

内存数据库的问题,内存数据是会丢的,如何保证fail后,可以恢复

所以他也要记录Redo到磁盘,但这里的Redo的概念其实发生了变化,和page无关,所以一般也是逻辑的

Undo,内存数据库一般都是mvcc,所以不用刻意去记录undo

原文地址:https://www.cnblogs.com/fxjwind/p/12205206.html

时间: 2024-08-27 15:06:41

Redo,Undo,Binlog的相关文章

redo、undo、binlog的区别

在MySQL中,redo.undo.binlog经常见,但很容易混淆这三者.   redo undo binlog 作用 保持事务的持久性 帮助事务回滚及MVCC的功能 进行Point-In-Time的恢复及主从复制环境的建立 产生主体 InnoDB MySQL MySQL 类型 物理日志 逻辑日志 逻辑日志 内容 每个页的修改 修改前的行数据 执行的SQL语句 每个事务的日志数量 事务执行中不断写入,多事务可并发写入 看修改的行数据量 事务提交后记一条SQL语句

说说MySQL中的Redo log Undo log都在干啥

阅读目录(Content) 1 undo 1.1 undo是啥 1.2 undo参数 1.3 undo空间管理 2 redo 2.1 redo是啥 2.2 redo 参数 2.3 redo 空间管理 3 undo及redo如何记录事务 3.1 Undo + Redo事务的简化过程 3.2  IO影响 3.3 恢复 在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件. MySQL中的日志文件,

InnoDB存储引擎介绍-(2)redo和undo学习

01 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC). - 事务的原子性(Atomicity)事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作.如果在执行的过程中发生了错误,要回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过. - 原理Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数

【知识点整理】Oracle中NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行速度的比较

[知识点整理]Oracle中NOLOGGING.APPEND.ARCHIVE和PARALLEL下,REDO.UNDO和执行速度的比较 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 系统和会话级别的REDO和UNDO量的查询 ② NOLOGGING.APPEND.ARCHIVE和PARALLEL下,REDO.UNDO和执行速度的比较(重点)   Tips: ① 本文

小记---------maxwell 一个可以实时读取mysql二进制日志binlog,并生成JSON格式的消息,作为生产者发送给kafka,Redis,文件或其他平台的应用程序

maxwell主要提供了下列功能 支持 SELECT * FROM table 的方式进行全量数据初始化 支持在主库发生failover后,自动回复binlog位置(GTID) 可以对数据进行分区,解决数据倾斜问题,发送到kafka的数据支持database,table,column等级别的数据分区 工作方式是伪装为Slave,接受binlog events, 然后根据schemas信息拼装,可以接受ddl.xid.row等各种event 1.首先配置mysql 启用binlog (因为我们没有

【msql】redo and undo log

Innodb Crash Recovery InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性.和大多数关系型数据库一样,InnoDB记录了对数据文件的物理更改,并保证总是日志先行,也就是所谓的WAL,即在持久化数据文件前,保证之前的redo日志已经写到磁盘 Crash Recovery是InnoDB引擎的一个特点,当故障发生,重新启服务后,会自动完成恢复操作,将数据库恢复到之前一个

Oracle redo与undo 第二弹

首先看一下undo与redo的字面意思:   undo:撤销,也就是取消之前的操作.   redo:重做,重新执行一遍之前的操作. 什么是REDO REDO记录transaction logs,分为online和archived.以恢复为目的. 比如,机器停电,那么在重起之后需要online redo logs去恢复系统到失败点. 比如,磁盘坏了,需要用archived redo logs和online redo logs去恢复数据. 比如,truncate一个表或其他的操作,想恢复到之前的状态

RAC中的redo和undo管理

RAC环境中.每个实例对应相应的redolog集(至少2个)和相应的undo表空间. 实例恢复: 单实例数据库的实例恢复: redo:所有已经提交和未提交的操作做前滚 undo:所有未提交的操作做回滚 RAC环境的实例恢复: 当节点A实例崩溃后,则节点B自动根据redolog前滚在undo回滚(立即进行),无需等待节点A的实例正常恢复.(实例恢复由剩余节点进行,如果实例都崩溃了,则有第一个启动的实例节点进行恢复 ) eg:在alarmlog中可以看到 Post SMON to Start 1st

MySQL5.7.18 备份、Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份,数据导入导出

粗略介绍冷备,热备,温暖,及Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份 --备份的目的 灾难恢复:意外情况下(如服务器宕机.磁盘损坏等)对损坏的数据进行恢复和还原保证数据不丢失,最小程度地丢失需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用 --备份与恢复概述 根据备份的方法可以分为: 1.Hot Backup(热备) 2.Cold Backup(冷备) 3.Warm Backup(温备) Hot Backup是指