欢迎投稿

今日深度:

日志系统(2),

日志系统(2),


redo log

redo log:重做日志。每当有操作时,在数据变更之前将操作写入redo log,这样当发生掉电之类的情况时系统可以在重启后继续操作
undo log:称为撤销日志,当一些变更执行到一半无法完成时,可以根据撤销日志恢复到变更之间的状态。

redo log位于存储引擎层,InnoDB中有使用。InnoDBredo log是固定大小,比如配置一组4个文件,每个文件的大小为1G,那么总共可以记录4GB的操作。从头开始写,写到末尾就又回到开头循环写。

  • write pos:当前记录的位置,一边写一边后移
  • checkpoint:当前要擦除的位置,是往后推移并且循环的,擦出记录前要把记录更新到数据文件

write poscheckpoint之前是日志还空着的部分,可以用来记录新的操作。如果write pos追上checkpoint,表示日志满了,这时候不能再执行新的更新,得停下来先擦掉一些记录。

有了redo logInnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力成为crash-safe

WALWrite-Ahead Loggin,预写日志系统。在使用WAL的系统中,所有的修改都先被写入到日志中,然后再被应用到系统状态中。通常包含redo和undo两部分信息。
具体来说,当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是系统比较空闲的时候做。

binlog

归档日志,位于Server层。

为什么会有两份日志?
最开始MySQL里并没有InnoDB引擎。MySQL自带的引擎是MyISAM,但是MyISAM没有crash-safe的能力,binlog日志只能用于归档。而InnoDB是另一个公司以插件形式引入MySQL的,既然只依靠binlog是没有crash-safe能力的,所以InnoDB使用另一套日志系统也就是redo log来实现crash-safe能力。

redo log差别:

误删表后的操作:

MySQLbinlog日志可以用于误操作后的数据恢复工作以及主从复制一致性的工作。

www.htsjk.Com true http://www.htsjk.com/Mysql/42654.html NewsArticle 日志系统(2), redo log redo log :重做日志。每当有操作时,在数据变更之前将操作写入 redo log ,这样当发生掉电之类的情况时系统可以在重启后继续操作 undo log :称为撤销日志,当一...
相关文章
    暂无相关文章
评论暂时关闭