MySQL 的 binlog 和 redolog

参考资源:MySQL 实战 45 讲

MySQL 的 binlog 和 redolog

在 Mysql 中,有两个重要的日志,binlog 和 redolog。在数据恢复和备份上起着重要的作用。

binlog

binlog 是 Mysql 中 server 层的数据记录日志,它记录了所有数据的逻辑操作。例如:” id = 2 的行 a 字段从 1 变成了 2 “,这样的记录。并且数据是以追加的形式存储在磁盘上的。

redolog

redolog 是在 InnoDB 的存储引擎中实现的,它并不是 Mysql 原生的,也就是说,其他的存储引擎(MySIAM, memory)是可能不存在 redolog 的。在 InnoDB 的存储引擎中,数据在存储的过程中,并不是直接落盘的,如果每一次数据操作都从磁盘上取的话会大大降低 Mysql 的使用效率。所以,InnoDB 为了提高效率,使用 redolog 作为中间介质来存储一部分数据。当然,redolog 的实现是基于内存的,这样才能足够快,并且 redolog 的空间是有限的,并不是像 binlog 以追加的方式添加日志数据,是一个循环的数据结构,存储在内存中。

在存储数据的过程中,如果 redolog 的内存被沾满,那么会将一部分数据先落盘,然后再写入内存。等数据库空闲的时候,再将 redolog 中的日志全部同步到磁盘中。

更新数据的过程(此处以数据引擎为 InnoDB 为例)

一个 Mysql 的 update 操作,例如:update T set c = 2 where id = 1,这样一个简单的语句,在 Mysql 内部大致分为以下几个步骤:

  • 客户端向 Mysql 服务器发起链接
  • Mysql 连接器 对帐号和密码进行验证,并赋予权限
  • 进入Mysql 查询缓存,更新操作会将更新表的查询缓存全部删除
  • Mysql 分析器 对语句进行语法和词法分析
  • Mysql 优化器 对语句进行优化,例如,命中哪个索引,连表操作优化等
  • Mysql 执行气 对语句进行执行,这个时候打开表,调用数据引擎的数据接口更新数据
  • Mysql 数据引擎(InnoDB) 内存中查询是否存在需要更新的数据,若存在,则返回,若不存在,则从磁盘读取并同步至内存后返回给 Mysql 执行器
  • Mysql 执行器 获取到数据后相应需要更新的数据进行更新操作,发送回数据引擎
  • Mysql 数据引擎(InnoDB)接收到数据后写入 redolog 日志并且将本条数据的状态标记为 prepare ,告诉 Mysql 执行器 事务随时可以 commit
  • Mysql 执行器 写入 binlog 日志,记录本条数据的更新记录,发送数据给数据引擎,提交事务
  • Mysql 数据引擎(InnoDB) 将本条数据的状态标记为 commit 已提交,等待空闲时候将数据同步至磁盘中
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值