美文网首页
丁奇-MySQL实战读书笔记2

丁奇-MySQL实战读书笔记2

作者: 布朗XD | 来源:发表于2021-02-01 20:01 被阅读0次

今日主题:redo log(重做日志)和 binlog(归档日志)。

redo log(重做日志)

MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。这就跟记账一样,也就是先写粉板,等不忙的时候再写账本(因为写账本慢那)。
InnoDB 引擎就会先把记录写到 redo log(粉板)里面(这个也是写磁盘,注意写redo log是顺序写,所以效率比较高),并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面。

图片描述

比如这个图,如果日志写满,就需要将日志的内容挪到磁盘中,这样才可以清理数据。
InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么这块“粉板”总共就可以记录 4GB 的操作。从头开始写,写到末尾就又回到开头循环写。

write pos :当前写入的位置。
checkpoint: 数据开始的位置。
write pos到checkpoint部分就是可写的区域。有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe。

日志模块:binlog

  • redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;
  • binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
  • redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
图片描述

1.binlog只有在commit的时候才会写入; 2.当prepare log 写入成功且binglog写入成功后发生crash,在mysql启动时候,会自动commit这个事物; 3.当prepare log写入成功,binlog写入失败,此时发生crash,mysql启动会自动回滚掉这个事物。

相关文章

  • 丁奇-MySQL实战读书笔记2

    今日主题:redo log(重做日志)和 binlog(归档日志)。 redo log(重做日志) MySQL 里...

  • mysql的锁

    整理自 丁奇的MySQL实战45讲 全局锁 命令Flush tables with read lock (FTWR...

  • 丁奇-MySQL实战读书笔记1

    这个专栏的内容是我工作以来看过讲MySQL最深入而且最细致的,作者丁奇是前阿里资深技术专家,和褚霸(霸爷)一起研究...

  • 丁奇-MySQL实战读书笔记3

    隔离性与隔离级别 若隔离级别是“读未提交” V1=2 V2=2 V3=2 若隔离级别是“读提交” V1=1 V2...

  • 丁奇-MySQL实战读书笔记6

    全局锁 全局锁就是对整个数据库实例加锁,全局锁的典型使用场景是,做全库逻辑备份。 表级锁 一种是表锁,一种是元数据...

  • 丁奇-MySQL实战读书笔记5

    在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,...

  • 丁奇-MySQL实战读书笔记4

    索引维护 B+ 树为了维护索引有序性,在插入新值的时候需要做必要的维护。以上面这个图为例,如果插入新的行 ID 值...

  • 丁奇-MySQL实战读书笔记14

    1:又刷新了认知,先给结论(之前不知从哪看的,以为count(主键id)性能最佳)按照效率排序的话,count(字...

  • 丁奇-MySQL实战读书笔记15

    本期是答疑,把核心要点记录一下: MySQL 怎么知道 binlog 是完整的? binlog-checksum ...

  • 丁奇-MySQL实战读书笔记9

    普通索引和唯一索引,应该怎么选择? 当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在...

网友评论

      本文标题:丁奇-MySQL实战读书笔记2

      本文链接:https://www.haomeiwen.com/subject/hlestltx.html