MySQL学习(九)小结

redo-log 和 bin-log 是如何联系起来的?

update 语句在更新的时候先更新内存后,写 redo-log 然后 bin-log ,其中后面一步是使用了两阶段提交,也就是每一个更新都会写 bin-log ,要是发生异常崩溃的时候,

回答:它们有一个共同的数据字段,叫XID。崩溃恢复的时候,会按顺序扫描redo log:

  • 如果碰到既有prepare、又有commit的redo log,就直接提交;
  • 如果碰到只有parepare、而没有commit的redo log,就拿着XID去binlog找对应的事务。

redo log 和 bin log

### redo log记录的是数据的物理变化,就是某个数据行从 X1 变到 X2 的过程。 

### bin log记录的是数据的逻辑逻辑变化,可以类比于就是执行像SQL一样的逻辑。

为什么 MySQL 已经有了 bin-log 还需要 redo-log ,是不是多此一举?

一个原因是历史原因,InnoDB 引擎是以插件的形式的加入到 MySQL ,而且 bin log 是属于 server 层的,其他引擎也都可以使用,但是 redo-log 则是 InnoDB 引擎特有的
12。另外一个原因就是 redo-log 主要的功能是事务持久化支持崩溃恢复,而bin log 只能作数据归档,那你肯定会说为bin log 增加崩溃恢复的功能就行了嘛,是的,那样就会重新设计出一个 redo log 出来,于是 redo log 变得不可取代。

参考资料

  • http://scholar.hedasudi.com/ (谷歌搜索)
  • https://cloud.tencent.com/developer/article/1417482 (redo log)
  • https://www.one-tab.com/page/86HwR8klRGaOmeH3vUkdCw

相关推荐