丁奇-MySQL实战读书笔记2

2021-02-01  本文已影响0人  布朗XD

今日主题: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

图片描述

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

上一篇下一篇

猜你喜欢

热点阅读