为什么有了redo log 还需要 binlog?

原问题:

 binlog是什么?

你听说过删库跑路吧
为了`防止数据库被删除`带来的影响
server层会将`历史上的所有变更操作`,记录到`磁盘上的日志文件`中
这个日志文件就是所谓的binlog,一旦误删表
就可以利用binlog来恢复数据
那么问题就来了
InnoDB有一个redo log也做类似的事情,为什么还要多此一举?(很现实!!)


解答:

1. 功能定位不同

  • redo log
    主要用于在事务执行过程中记录对数据页所做的修改操作,它是一种基于内存的数据修改日志,是 InnoDB 存储引擎特有的,目的是保证事务的持久性。在事务提交时,通过将 redo log buffer 中的日志写入到磁盘上的 redo log 文件中,即便数据库发生异常崩溃(比如断电、系统故障等),重启后可以利用 redo log 对那些已经提交但数据还没来得及完全持久化到磁盘的数据页进行重做(redo)操作,以此来恢复到事务提交后的正确状态,确保数据完整性和一致性。它重点关注的是在事务执行期间,对数据页的物理修改记录,是保障存储引擎内部数据可靠性的关键机制。

  • binlog
    是 MySQL Server 层实现的一种逻辑日志,记录的是数据库执行的所有变更操作语句(例如 SQL 层面的 INSERT、UPDATE、DELETE 等语句),它的存在并不局限于某一个存储引擎,而是面向整个 MySQL 数据库服务的。它更侧重于从逻辑层面记录数据库发生的变化,其主要用途包括数据备份、主从复制等场景,比如在搭建主从复制架构时,主库会将 binlog 发送给从库,从库解析 binlog 并执行其中的语句来实现数据同步,并且在误操作(如误删表等情况)时,可以利用 binlog 来进行基于时间点或者特定位置的恢复操作。

2. 作用范围不同

  • redo log
    作用范围主要在 InnoDB 存储引擎内部,和具体的存储引擎的数据组织、存储结构以及事务处理机制紧密相关。例如,它记录的是对 InnoDB 的 B + 树索引页、数据页等物理层面修改的信息,以保证 InnoDB 自身在面对各种意外情况时的数据可靠性,是 InnoDB 能够高效处理事务并保障数据持久化的重要组件,但是其他存储引擎(如果有的话,像 MyISAM 等)并不能使用 redo log 来达到类似的功能。

  • binlog
    作用于整个 MySQL 数据库层面,不管使用的是 InnoDB 存储引擎还是其他存储引擎(尽管现在 InnoDB 应用极为广泛),只要执行了数据变更操作,都会记录到 binlog 中。所以它提供了一种统一的、面向整个数据库服务的日志记录方式,方便跨存储引擎以及在整个数据库层面进行数据备份、恢复以及复制等操作,是数据库运维管理、架构搭建等工作中很重要的基础支撑。

3. 数据恢复场景不同

  • redo log
    主要应对的是数据库在运行过程中出现的意外崩溃场景,比如服务器突然断电、进程异常终止等情况,通过重做(redo)已经记录在 redo log 中的操作,来确保那些已经提交但没来得及完全落盘的数据不会丢失,它保障的是事务执行的原子性、一致性和持久性在意外发生时依然有效,恢复的是内存数据到磁盘的一致性状态。

  • binlog
    更多用于人为误操作导致的数据错误或者丢失情况,比如误删了某个重要的表或者错误地更新了大量数据等,这时可以利用 binlog 进行基于时间点或者特定位置的恢复,能够找回之前某个正确时间点的数据状态,提供了一种相对灵活、可以按照业务需求来定位恢复的手段,并且常用于数据备份恢复策略以及主从复制环境下的数据同步与恢复场景中。

4. 持久化时机和机制不同

  • redo log
    在事务执行过程中,会先将修改操作记录到 redo log buffer 中,然后根据一定的策略(比如事务提交时,或者当 buffer 达到一定的容量等情况)将 buffer 中的日志刷写到磁盘上的 redo log 文件中,这个过程是由 InnoDB 存储引擎自己管理和控制的,相对较为频繁地和存储引擎内部的数据操作紧密配合,以尽量减少数据丢失风险。

  • binlog
    由 MySQL Server 层控制其写入磁盘的时机,通常是在事务提交时进行追加写入 binlog 文件,而且 binlog 还支持多种不同的刷盘策略(比如基于缓存大小、基于时间间隔等),相对来说它和 Server 层的整体事务管理以及其他模块交互更为密切,并且由于其记录的是逻辑语句,所以在持久化的内容和方式上与 redo log 有着明显区别。

综上所述,虽然 InnoDB 的 redo log 和 binlog 都有记录数据库变更操作相关的功能,但它们各有侧重、作用范围和应用场景不同,所以二者并存且相互配合共同保障了 MySQL 数据库的数据可靠性、备份恢复以及其他重要功能的实现,并非是多此一举。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值