MySQL系列之事务日志Redo log学习笔记
学习本博客之前需要储备知识:
在上篇博客,我们知道了undo log,继续上篇博客,学习另外一种重要的InnoDB事务日志redo log
Redo :重做的意思,undo是撤销回滚意思 Redo log:被称之为重做日志,是在数据库发生意外时,进行数据恢复,redo log会备份是事务执行过程中的修改数据,redo log备份的是事务过程中最新的数据位置
前面的学习,我们知道undo log是用于回滚的日志记录,是属于逻辑日志,而本博客介绍的redo log是一种物理日志,只要用于预防系统冗机等特殊情况,出现这种情况时,重启mysql会读取redo log,从而实现某些数据未写入磁盘的数据写到磁盘进行持久保存
基于上一章博客的图,进行拓展,对比一下undo log和redo log
引用51博客的图例:图来自https://blog.51cto.com/wangwei007/2287431
redo log写满时候,指针回到原点,重新开始覆盖保存,如果 write pos 追上checkpoint,表示写满,这时候不能再执行新的更新,得停下来先擦掉一些记录,把checkpoint推进一下节点
通过命令查看redo log参数:
show variables like '%innodb_log%';
【拓展知识】,每个InnoDB存储引擎至少有1个日志重做文件组(redo file group),每个文件组至少有2个redo日志文件,默认为ib_logfile0
和ib_logfile1
,存储路径在${datadir}
Redo Buffer 持久化到 Redo Log 的策略,通过变量 innodb_flush_log_at_trx_commit
的值来决定