MySQL 日志系统 redo log、binlog

MySQL
479
0
0
2022-04-17

redo log 是什么

redeo log (重做日志),有一个比喻可以用来描述,就是酒店掌柜有一个粉板,用来记录客人的赊账记录,如果赊账的人不多,他可以记在粉板上,如果赊账的人多了,他记不下了,就需要有一个记账本。

这时,如果客人来赊账或者还账,掌柜可以有两种方式:

一是翻开记账本找到这个客人的所属赊账记录修改

二是直接写在粉板上,等客人少的时候或者打样了写在本子上。

当客人很多的时候肯定是选择后者效率最高

同样的,MySQL 也是一样,redo log 就是这个作用,当请求过来时每次都去修改硬盘中的数据对 IO 消耗很大,为了解决这个问题,MySQL 就用了同样的设计思想来提升更新效率。

简单说,就是 InnoDB 在更新记录的时候会先把更新操作记录在日志中,在写入到内存,整个更新就算完成了,然后在系统空闲的时候等其他方面因素在将 redo log 中的数据落入磁盘持久化。

如果今天赊账的不多,掌柜可以等打样后将粉板上的核对后写入记账本,如果客人特别多的时候粉板写满了,这个时候只能将粉板的内容消除掉,在重新写在粉板上。

同样,redo log 也是有大小的,比如可以配置为 4 组文件,每组文件为 1 GB,那么这块粉板就可以记录 4 GB的内容,当写满之后就开始消除前面的循环写。

binlog

binlog 是 MySQL Server 端的日志,他是追加写的,他记录了 MySQL 中所有操作的日志。

它与 redo log 日志的区别在于 redo log 是物理的,binlog 是逻辑的,由于 redo 是属于 InnoDB 引擎,所以必须要有 binlog,因为你可以使用别的引擎。