binlog 和 redolog 有什么区别?

发布时间:2023年12月26日
昨天,一个工作 3 年的同学好不容易约到一个面试,却被这个问题难倒了。
“binlog 和 redolog 有什么区别?”
关于这个问题的回答,我把它整理到了 50W 字的面试文档里面,大家可以去
公众号:“?? 灰灰聊架构?? ”, 回复暗号:“?? 321?? ”即可获取

一、问题解析

首先,binlog 和 redolog 都是 Mysql 里面用来记录数据库数据变更操作的日志。{如图}其中 binlog 主要用来做数据备份、数据恢复和数据同步,大家初步接触这个概念 ,应该是在 Mysql 的主从数据同步的场景中,master 节点的数据变更,会写入到 binlog 中,然后再把 binlog 中的数据通过网络传输给 slave 节点,实现数据同步。
而 redolog,主要是在 Mysql 数据库事务的 ACID 特性里面,用来保证数据的持久化特性。但是其实它还有很多的作用。比如数据库崩溃时,可以通过 Redo Log 来恢复未完成的数据,保证数据的完整性。通过合理的配置 Redo Log 的大小和数量,还可以优化 Mysql 的性能。
那下面来看下这个面试题的回答吧。

二、问题解答

binlog 和 redolog 的区别有很多,我可以简单总结三个点
1. 使用场景不同,binlog 主要用来做数据备份、数据恢复、以及主从集群的数据同步;Redo Log 主要用来实现 Mysql 数据库的事务恢复,保证事务的 ACID 特性。当数据库出现崩溃的时候,Redo Log 可以把未提交的事务回滚,把已提交的事务进行持久化,从而保证数据的一致性和持久性。
2. 记录的信息不同,binlog 是记录数据库的逻辑变化,它提供了三种日志格式分别是
statement,row 以及 mixed ;redo log 记录的是物理变化,也就是数据页的变化结果。
3. 记录的时机不同, binlog 是在执行 SQL 语句的时候,在主线程中生成逻辑变化写入到磁盘中,所以它是语句级别的记录方式; RedoLog 是在 InnoDB 存储引擎层面的操作,它是在 Mysql 后台线程中生成并写入到磁盘中的,所以它是事务级别的记录方式,一个事务操作完成以后才会被写入到 redo log 中。
以上就是我的理解!
文章来源:https://blog.csdn.net/sinat_53467514/article/details/135223096
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。