zhanggao / learnNotes

2 stars 2 forks source link

redo log、binlog、undo log #9

Open zhanggao opened 4 years ago

zhanggao commented 4 years ago

redo log(重做日志):

  1. InnoDB特有的日志,一般配置一组4个1G的文件,文件可以理解成一个环状结构,一个写入位置,一个擦除位置,当写入位置追上了擦除位置时,这时就要停下来刷磁盘。
  2. InnoDB写入时,先写日志,再更新内存,此时就算执行完成了,后面会在适当的时候再刷到内存中。
  3. 物理日志,记录了在某个页上改了什么。

binlog(归档日志):

  1. binlog是Server层的日志。
  2. 不断追加写,一个文件写到一定大小,再建一个。
  3. 逻辑日志,记录了具体的某个语句的修改,比如给某行某个字段的值+1。
zhanggao commented 4 years ago

undo log(回滚日志)

zhanggao commented 4 years ago

WAL 先写日志,再写磁盘,redo log写成功了事务就算成功了。

zhanggao commented 4 years ago

update t set c=c+1 where id=2; 1、取id=2这行; 2、如果数据页不在内存中,则从磁盘中读入内存; 3、返回该行的值; 4、将这行的c加1; 5、写入新行; 6、新行更新到内存; 7、写入redolog,处于prepare阶段; 8、写入binlog; 8、提交事务,处于commit阶段

zhanggao commented 4 years ago

恢复数据到任意时间点t1: 取出t1之前的全量备份a,应用a时间点开始的binlog执行到t1时间点。