MySQL-redo log 和 binlog
redo log部分
为什么需要redo log?
简单的说,如果每次更新数据库的操作,都去更新磁盘的话,开销是很大的。通过引入redo log日志,其中记录了每次更新的操作明细,在系统不繁忙的时候,再更新到磁盘中,可以节省开销。
最新修改:
redo log 最主要的作用就是用于数据库异常宕机的恢复工作。
假如数据库永远不会发生异常宕机,那么其实根本不需要redo log,因为innodb中有线程不断的做把脏页刷新到磁盘的工作,数据库如果一直不宕机,就不会出现问题。
被划掉的线的部分的理解的产生是因为在极客时间《mysql实战45讲》的课程中,老师就是这么说的,所以就直接这么写了。但在后续的学习中,我查阅了《MySQL技术内幕-InnoDb存储引擎的实现》这本书,发现了最开始的理解并不准确,所以进行了修改。
redo log的实现
redo log是一个环,大小是固定的,文件个数和大小是可以配置的。其中有两个指针,write和checkpoint,分别对应可以写入的位置,和已经刷新到磁盘的位置。
当write追上了checkpoint,说明已经没有空闲的位置可以写入了,就需要刷新一下,保证有位置可以写入。
binlog部分
redo log 和 binlog的区别
- redo log是 innodb存储引擎特有的;binlog是server层,属于共有的
- redo log是物理日志,记录在某个数据页的修改;binlog是逻辑日志
- redo log是一个环,循环写;binlog是追加写,不会覆盖以前的日志
- redo log用于异常重启恢复;binlog用于备份
一条更新语句的执行过程(redo log和binlog的配合)
- 执行器调用引擎接口写入新数据
- 引擎把更新操作记录到 redo log中,此时redo log为prepare状态
- 执行器生成这个操作的binlog,并写入磁盘
- 执行器调用引擎的事务提交接口,引擎把redo log的状态改为commit

prepare和binlog是如何保证一致性的?
- prepare阶段
- binlog写入阶段
- commit阶段
在2阶段之前崩溃时:
- 重启恢复:发现没有commit,回滚
- 备份恢复:没有binlog
保持了一致性
在3阶段之前崩溃时:
- 重启恢复:虽没有commit,但是binlog有,并且一致,所以恢复
- 备份恢复:有binlog
保持了一致性
最佳实践部分
- innodb_flush_log_at_trx_commit 参数建议设置为1,每次更新操作,redo log都会刷新到磁盘
- sync_binlog 参数建议设置为1,每次更新操做,binlog会刷新到磁盘
MySQL-redo log 和 binlog的更多相关文章
- MySQL redo log 与 binlog 的区别
MySQL redo log 与 binlog 的区别 什么是redo log 什么是binlog redo log与binlog的区别 1. 什么是redo log? redo log又称重做日志文 ...
- MySQL日志系统:redo log与binlog
日志系统主要有redo log(重做日志)和binlog(归档日志).redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志, 两者都是记录了某些操作的日志 ...
- MySQL 日志系统之 redo log 和 binlog
之前我们了解了一条查询语句的执行流程,并介绍了执行过程中涉及的处理模块.一条查询语句的执行过程一般是经过连接器.分析器.优化器.执行器等功能模块,最后到达存储引擎. 那么,一条 SQL 更新语句的执行 ...
- 一生挚友redo log、binlog《死磕MySQL系列 二》
系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...
- MySQL更新数据时,日志(redo log、binlog)执行流程
1:背景 项目需要做Es和数据库的同步,而手动在代码中进行数据同步又是Es的一些不必要的数据同步操作和业务逻辑耦合,所以使用的了读取mysql的binlog日志的方式进行同步Es的数据. 问题1:根据 ...
- MySQL是怎么保证redo log和binlog是完整的?
摘要:WAL机制保证只要redo log和binlog保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复. 本文分享自华为云社区<MySQL会丢数据吗?>,作者: JavaEdg ...
- 2 万字 + 30 张图 | 细聊 MySQL undo log、redo log、binlog 有什么用?
作者:小林coding 计算机八股文网站:https://xiaolincoding.com/ 大家好,我是小林. 从这篇「执行一条 SQL 查询语句,期间发生了什么?」中,我们知道了一条查询语句经历 ...
- 数据库中的两个最重要的日志redo log和binlog
mysql整体来看其实只有两部分,一部分是server层,一部分是引擎层. 1.redo log(重做日志):当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写入redo log里面,并更新 ...
- redo log 与 binlog
redo log 与 binlog redo log redo log (重做日志)是处于存储引擎层的,是InnoDB引擎特有的 redo log 存储的是物理日志 --- 即,"在某个 ...
- msyql redo log和binlog
更新语句执行流程 下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c: create table T(ID int primary key, c int); 如果要将 ID=2 这一行 ...
随机推荐
- Pytorch Layer层总结
卷积层 nn.Conv1d 对由多个输入平面组成的输入信号应用一维卷积. nn.Conv2d 在由多个输入平面组成的输入信号上应用 2D 卷积. nn.Conv3d 对由多个输入平面组成的输入信号应用 ...
- JVM实战—12.OOM的定位和解决
大纲 1.如何对系统的OOM异常进行监控和报警 2.如何在JVM内存溢出时自动dump内存快照 3.Metaspace区域内存溢出时应如何解决(OutOfMemoryError: Metaspace) ...
- 前端学习openLayers配合vue3(获取矢量图的个数,省份的个数)
矢量图层绘制了一个中国地图,我们获取一下矢量图层的个数 关键代码 map .getLayers()//获取所有图层 .item(1)//获取矢量图层 .getSource() .on("ch ...
- 监听sessionStorage中值的变化
应用场景:将登录接口所返回的用户信息存入sessionStorage,在其他地方需要使用到用户信息,但不知道什么时候接口请求完,此时可以监听sessionStorage中值的变化. 应用:Event自 ...
- Java方法引用、lambda如何序列化&方法引用与lambda实现原理
系列文章目录和关于我 0.引入 最近笔者使用flink实现一些实时数据清洗(从kafka清洗数据写入到clickhouse)的功能,在编写flink作业后进行上传,发现运行的时候抛出:java.io. ...
- .NET 数据拷贝方案选择
应用中我们经常使用到数据的复制,在.NET中有多种方式可以实现复制数据或对象.选择哪种方式通.是浅拷贝还是深拷贝,取决于对象的复杂性.数据量以及具体需求场景. 1. MemberwiseClone拷贝 ...
- flutter设置导航栏顶部标题与组件Text和Center和Container详解
无状态组件和有状态组件的介绍 StatelessWidget 是无状态组件,状态是不可以改变的 StatefulWidget 是有状态组件 持有的状态可能在 widge 生命周期中改变 Statele ...
- windows 安装Nacos步骤
一.Nacos中文文档网址 1.Nacos官网地址:https://nacos.io/en-us/ Nacos中文文档网址:Nacos 快速开始https://nacos.io/zh-cn/docs/ ...
- 聊聊GRPO算法——从Open R1来看如何训练DeepSeek R1模型
概述 首发自个人公众号:阿郎小哥的随笔驿站 DeepSeek R1系列建议阅读之前的系列文章: 聊聊DeepSeek R1的一些总结 聊聊DeepSeek R1的开源复现库--Open R1之合成数据 ...
- linux goreplay流量压测工具
项目地址https://github.com/buger/goreplay 下载wget https://github.com/buger/goreplay/releases/download/v0. ...