天天看点

【Java面试】binlog和redolog有什么区别?

作者:跟着Mic学架构

一个工作3年的同学好不容易约到一个面试,却被这个问题难倒了。

“binlog和redolog有什么区别?”

关于这个问题的回答,我把它整理到了30W字的面试文档里面,大家可以S信我发【Mic】领取。

问题解析

这个问题其实比较简单,但凡稍微了解过Mysql数据库,都很容易回答出来。

一般考察1~3年的程序员,所以对于这个工作年限的小伙伴要注意了解它们的原理。

首先,binlog和redolog都是Mysql里面用来记录数据库数据变更操作的日志。

其中binlog主要用来做数据备份、数据恢复和数据同步,大家初步接触这个概念 ,应该是在Mysql的主从数据同步的场景中,master节点的数据变更,会写入到binlog中,然后再把binlog中的数据通过网络传输给slave节点,实现数据同步。

【Java面试】binlog和redolog有什么区别?

而redolog,主要是在Mysql数据库事务的ACID特性里面,用来保证数据的持久化特性。但是其实它还有很多的作用。

比如数据库崩溃时,可以通过Redo Log来恢复未完成的数据,保证数据的完整性。

通过合理的配置Redo Log的大小和数量,还可以优化Mysql的性能。

那下面来看下这个面试题的回答吧。

问题答案

binlog和redolog的区别有很多,我可以简单总结三个点

  1. 使用场景不同,binlog主要用来做数据备份、数据恢复、以及主从集群的数据同步; Redo Log主要用来实现Mysql数据库的事务恢复,保证事务的ACID特性。当数据库出现崩溃的时候,Redo Log可以把未提交的事务回滚,把已提交的事务进行持久化,从而保证数据的一致性和持久性。
  2. 记录的信息不同,binlog是记录数据库的逻辑变化,它提供了三种日志格式分别是statement,row以及mixed;
  3. redo log记录的是物理变化,也就是数据页的变化结果。
  4. 记录的时机不同, binlog是在执行SQL语句的时候,在主线程中生成逻辑变化写入到磁盘中,所以它是语句级别的记录方式; RedoLog是在InnoDB存储引擎层面的操作,它是在Mysql后台线程中生成并写入到磁盘中的,所以它是事务级别的记录方式,一个事务操作完成以后才会被写入到redo log中。

以上就是我的理解!

总结

好了,今天的分享就到这里结束了

如果喜欢我的作品,记得点赞、收藏、关注

需要高手面试文档合集(附赠大厂内部面试文档)或者有不懂的技术面试题想咨询的小伙伴可以后台私信【Mic】。

【Java面试】binlog和redolog有什么区别?
【Java面试】binlog和redolog有什么区别?

继续阅读