美文网首页
丁奇-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

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