mysql redolog binlog bufferPool 刷脏页
在MySQL的InnoDB当中,有两个重要日志模块,一个是redo log(重做日志) 一个是binlog(归档日志) 。
redo log的好处
.当我们修改一条数据时,如果数据在内存中,我们是先会去改内存的,而不是先去改磁盘。假如数据都在内存中,这时候断电了怎么办,服务器宕机怎么办,这个时候就需要我们的redo log了。
2.redo只是记录了对数据的修改,数据会比一页数据小得多。大大减少了IO频率。并且想比于更新操作,更新过程是在磁盘上随机IO,费时。 而写redo log 是在磁盘上顺序IO。效率要高。
在每一条数据更新时,MySQL会先写redo log日志,在去写binlog 日志。在写这两个日志过程中会涉及到两阶段提交。他可以保证两个日志逻辑上的一致性。所以即使因为停电,宕机等原因,MySQL也可以通过redo log将数据进行恢复。
———————
两者区别
redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=10 这一行的 c 字段加 10 ”。
redo log 是循环写的,空间固定会用完; binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
————————————————
有了redlog,为什么还要有binglog
一个原因是,redolog只有InnoDB有,别的引擎没有。另一个原因是,redolog是循环写的,不持久保存,binlog的“归档”这个功能,redolog是不具备的。
redo log 是循环写的,固定空间用完会怎么办?这个也就是下面也会带着大家去了解的MySQL的刷脏页策略。