当前位置: 首页 > news >正文

redo和binlog区别

    事务是数据库区别于文件系统的最重要功能,数据库事务支持ACID四个特性,其中I:隔离性是通过锁的方式实现的,剩下的A:原子性 C:一致性 D:持久性是通过redo日志、undo日志、binlog日志来实现的。

    我们今天主要来说下在MySQL数据库中redo日志和binlog日志的区别。

    先说二者的作用,redo是用于数据库崩溃后恢复的,属于innodb存储引擎特有的功能。binlog用于数据库备份恢复、主从复制,是MySQL的server层面对所有存储引擎都有。

    日志提交:MySQL数据库提交一个事务时,通过两阶段提交策略,当事务确认写入到redo日志和binlog日志后,事务才算执行完成。

    数据库崩溃恢复过程:当数据库遇到意外崩溃后再次重启,在利用redo日志恢复缓存中的脏数据时,会比较redo日志和binlog日志中的记录,如果事务在binlog中已经记录完成,则直接提交该事务。如果事务在binlog中没有记录,只在redo中存在,则回滚该事务。

    总结起来,redo日志和binlog日志区别如下:

    1、日志内容不同:redo以数据页的格式记录数据页的物理变化,binlog记录sql语句逻辑变化,也因此数据库崩溃恢复时使用redo速度更快。

    2、日志产生时间点不同:redo日志在事务执行过程中就开始写入,binlog日志在事务提交成功之后才开始写入。

    3、日志产生位置不同:redo日志由MySQL的innodb存储引擎专有,binlog日志是由server层面产生,所有的存储引擎都有binlog日志。

    4、日志写入顺序不同:redo日志写入时,由于是在事务执行过程中产生的,且事务支持并发,因此一个redo日志中会随机记录不同事务的redo日志,而binlog日志是在事务提交后才产生,binlog的写入顺序是事务提交顺序。

    5、刷盘时机不同。

    6、作用不同:redo日志用于MySQL数据库崩溃恢复,binlog日志用于MySQL主从复制、备份恢复。

    本文仅从宏观上讨论了binlog和redo log的不同,这其中涉及到redo和binlog日志记录格式、redo和binlog两阶段提交策略、数据库崩溃恢复时使用redo和binlog恢复的详细过程还会涉及到double-write、redo日志组、不同的刷盘时机,详细的内容会在后面慢慢追加,记录知识点的过程其实也能帮助我自己梳理一遍知识点,我也是在写这篇文章过程中慢慢意识到,从binlog和redo log区别这个知识点可以扩散到其他更详细的知识。

   


http://www.mrgr.cn/news/90292.html

相关文章:

  • DeepSeek 助力 Vue 开发:打造丝滑的步骤条
  • 模拟算法:深入探讨与C++实现
  • flutter Selector 使用
  • C#数据库操作系列---SqlSugar完结篇
  • 编译spring 6.2.2
  • hadoop之MapReduce:片和块
  • DeepSeek:全栈开发者视角下的AI革命者
  • Docker 部署 MongoDB | 国内阿里镜像
  • 【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构
  • Vue07
  • bitcoinjs学习笔记0(预备知识)
  • learn torch 01
  • three.js快速入门学习笔记
  • 渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)
  • 客户端渲染和服务端渲染
  • Android车机DIY开发之软件篇(十二) AOSP12下载编译
  • 防御综合实验
  • 【STM32】ADC|多通道ADC采集
  • 强化学习笔记
  • 推荐系统Day1笔记
  • [LUA ERROR] bad light userdata pointer
  • java后端开发day13--面向对象综合练习
  • 服务器绑定 127.0.0.1 和 0.0.0.0 的区别
  • 保姆级教程Docker部署Zookeeper镜像
  • 从零开始构建强大 AI 对话系统:ollama + deepseek + open-webui 完整部署教程(Docker 版)
  • 如何本地部署DeepSeek