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的区别
  1. redo log是 innodb存储引擎特有的;binlog是server层,属于共有的
  2. redo log是物理日志,记录在某个数据页的修改;binlog是逻辑日志
  3. redo log是一个环,循环写;binlog是追加写,不会覆盖以前的日志
  4. redo log用于异常重启恢复;binlog用于备份

一条更新语句的执行过程(redo log和binlog的配合)
  1. 执行器调用引擎接口写入新数据
  2. 引擎把更新操作记录到 redo log中,此时redo log为prepare状态
  3. 执行器生成这个操作的binlog,并写入磁盘
  4. 执行器调用引擎的事务提交接口,引擎把redo log的状态改为commit

prepare和binlog是如何保证一致性的?
  1. prepare阶段
  2. binlog写入阶段
  3. commit阶段

在2阶段之前崩溃时:

  • 重启恢复:发现没有commit,回滚
  • 备份恢复:没有binlog

保持了一致性

在3阶段之前崩溃时:

  • 重启恢复:虽没有commit,但是binlog有,并且一致,所以恢复
  • 备份恢复:有binlog

保持了一致性


最佳实践部分
  1. innodb_flush_log_at_trx_commit 参数建议设置为1,每次更新操作,redo log都会刷新到磁盘
  2. sync_binlog 参数建议设置为1,每次更新操做,binlog会刷新到磁盘

MySQL-redo log 和 binlog的更多相关文章

  1. MySQL redo log 与 binlog 的区别

    MySQL redo log 与 binlog 的区别 什么是redo log 什么是binlog redo log与binlog的区别 1. 什么是redo log? redo log又称重做日志文 ...

  2. MySQL日志系统:redo log与binlog

    日志系统主要有redo log(重做日志)和binlog(归档日志).redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志, 两者都是记录了某些操作的日志 ...

  3. MySQL 日志系统之 redo log 和 binlog

    之前我们了解了一条查询语句的执行流程,并介绍了执行过程中涉及的处理模块.一条查询语句的执行过程一般是经过连接器.分析器.优化器.执行器等功能模块,最后到达存储引擎. 那么,一条 SQL 更新语句的执行 ...

  4. 一生挚友redo log、binlog《死磕MySQL系列 二》

    系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...

  5. MySQL更新数据时,日志(redo log、binlog)执行流程

    1:背景 项目需要做Es和数据库的同步,而手动在代码中进行数据同步又是Es的一些不必要的数据同步操作和业务逻辑耦合,所以使用的了读取mysql的binlog日志的方式进行同步Es的数据. 问题1:根据 ...

  6. MySQL是怎么保证redo log和binlog是完整的?

    摘要:WAL机制保证只要redo log和binlog保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复. 本文分享自华为云社区<MySQL会丢数据吗?>,作者: JavaEdg ...

  7. 2 万字 + 30 张图 | 细聊 MySQL undo log、redo log、binlog 有什么用?

    作者:小林coding 计算机八股文网站:https://xiaolincoding.com/ 大家好,我是小林. 从这篇「执行一条 SQL 查询语句,期间发生了什么?」中,我们知道了一条查询语句经历 ...

  8. 数据库中的两个最重要的日志redo log和binlog

    mysql整体来看其实只有两部分,一部分是server层,一部分是引擎层. 1.redo log(重做日志):当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写入redo log里面,并更新 ...

  9. redo log 与 binlog

    redo log 与 binlog   redo log redo log (重做日志)是处于存储引擎层的,是InnoDB引擎特有的 redo log 存储的是物理日志 --- 即,"在某个 ...

  10. msyql redo log和binlog

    更新语句执行流程 下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c: create table T(ID int primary key, c int); 如果要将 ID=2 这一行 ...

随机推荐

  1. Python并发总结:多线程、多进程与异步编程

    随着多核的发展,Python中并发编程也变得越来越广泛且发展很快. 一方面,Python提供了多种并发编程工具. 比如,传统的多线程,通过threading模块方便地创建和管理线程,可用于I/O密集型 ...

  2. tnn初体验

    tnn-source download-model brew install opencv@3 && brew link --force opencv@3

  3. 「规则类怪谈」塔 - (preview)

      前段时间,大概五六月份,我很喜欢规则类怪谈.颓废的时候读了一大堆质量参差不齐的作品,试着编了一个世界观然后开写.咕着咕着磨到现在,至少情节大概成形了.最大的阻力在于物理规则的完备性和自洽性,为什么 ...

  4. Solution -「NOI 2017」「洛谷 P3826」蔬菜

    \(\mathscr{Description}\)   Link.   原题意比较简洁了.注意一下卖出的菜也会变质,且让它们代替未卖出的菜变质是更优的. \(\mathscr{Solution}\) ...

  5. 浅说 c++20 coroutine

    浅说cppcoro 上一篇<浅说c/c++ coroutine>介绍了stackful协程,举了win32 Fiber跟tencent/libco为例. 本篇https://www.cnb ...

  6. CentOS扩容boot分区并升级内核

    本文作者CVE-柠檬i:https://www.cnblogs.com/CVE-Lemon 前言 由于安装k8s需要升级内核,但我自己的的boot分区只有200M大小,无法安装新内核,所以干脆把swa ...

  7. Nginx配置文件及默认配置说明

    默认安装的1.16.1版本的主配置文件nginx.conf如图: 业务性配置引入额外的配置文件/etc/nginx/conf.d/default.conf如图:  现在可以在默认的根目录下找到2个页面 ...

  8. Kotlin:反引号中的函数命名、匿名函数、函数类型与隐式返回

  9. 解决yarn打包时出现“FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory”的问题

    1.问题描述 我们在使用yarn命令对项目进行打包时,可能会出现如下的错误信息 "FATAL ERROR: Reached heap limit Allocation failed - Ja ...

  10. 文本处理命令head tail more less tr cut paste wc

    文本处理命令 命令**head tail more less tr cut paste wc** 磁盘分区利用率 df|tr -s ' ' :|cut -d : -f5 df|tr -s ' ' :| ...