redo log、undo log、bin log之间的区别与联系

简单来说:

假设我们现在要做一个更新操作:update users set name='xxx' where id=10

首先这个sql肯定会经过sql接口、解析器、优化器、执行器几个环节,解析sql语句,生成执行计划,接着由执行器负责计划的执行,最后调用存储引擎的接口去执行。

一、重做日志(redo log)

更新的时候,首先是会对缓冲池(Buffer Pool)也就是存在在内存里的数据进行修改,此时磁盘的数据还没来得及修改,万一此时宕机,会导致内存修改后的数据丢失,此时就需要将内存所做的修改写入到rudo log buffer里去用来恢复数据。确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。

二、回滚日志(undo log)

如果我们执行的更新语句是在事务中,在事务提交之前都是可以对数据进行回滚的,因此undo log中记录了更新前的值,'zhangsan'和id=10这些信息都会记录在undo log里。

保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读

三、二进制日志(binlog)

用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。 
用于数据库的基于时间点的还原。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值