目录
问题解析
这个问题其实比较简单,但凡稍微了解过MySQL数据库,都很容易回答出来。
一般考察1~3年的程序员,所以对于这个工作年限的要注意了解它们的原理。
首先,binlog和redolog都是MySQL里面用来记录数据库数据变更操作的日志。
{如图}其中binlog主要用来做数据备份、数据恢复和数据同步,大家初步接触这个概念,应该是在MySQL的主从数据同步的场景中,master节点的数据变更,会写入到binlog中,然后再把binlog中的数据通过网络传输给slave节点,实现数据同步。
而redolog,主要是在MySQL数据库事务的ACID特性里面,用来保证数据的持久化特性。但是其实它还有很多的作用。
比如数据库崩溃时,可以通过RedoLog来恢复未完成的数据,保证数据的完整性。通过合理的配置RedoLog的大小和数量,还可以优化MySQL的性能。
那下面来看下这个面试题的回答吧。
问题答案
binlog和redolog的区别有很多,可以简单总结三个点:
1. 使用场景不同,binlog主要用来做数据备份、数据恢复、以及主从集群的数据同步;RedoLog主要用来实现MySQL数据库的事务恢复,保证事务的ACID特性。当数据库出现崩溃的时候,RedoLog可以把未提交的事务回滚,把已提交的事务进行持久化,从而保证数据的一致性和持久性。
2. 记录的信息不同,binlog是记录数据库的逻辑变化,它提供了三种日志格式分别是statement,row以及mixed;redolog记录的是物理变化,也就是数据页的变化结果。
3. 记录的时机不同,binlog是在执行SQL语句的时候,在主线程中生成逻辑变化写入到磁盘中,所以它是语句级别的记录方式;RedoLog是在InnoDB存储引擎层面的操作,它是在MySQL后台线程中生成并写入到磁盘中的,所以它是事务级别的记录方式,一个事务操作完成以后才会被写入到redolog中。