纯手绘图解 – MySQL undo log、redo log、binlog

纯手绘图解 - MySQL undo log、redo log、binlog

先看看一条SQL如何入库的

数据写入详细过程

  • 应用服务器与MySQL建立连接
  • 通过连接发送一条SQL语句(update student set score=100 where score=50)
  • SQL依次经过Server层的[分析器][优化器][执行器]
  • [执行器]根据[执行计划]操作执行引擎(InnoDB Engine)
  • InnoDB Engine从[磁盘]数据文件中将score=50读取到内存[BufferPool]中
  • 在修改之前,写入一条[undo log]将修改之前的值score=50保存起来
  • 先将缓存池[BufferPool]中score=50更新为score=100
  • 写入一条[redo log]将修改后的score=100存起来,用于异常场景事务[提交]
  • 写入一条[bin log]将修改后的score=100存起来
  • 后台IO线程将缓存池被修改的值score=100刷入磁盘
  • 为什么要拆分出两层架构

    这是一条非常简单的SQL语句[update student set score=100 where score=50],从MySQL服务端接收SQL到写入磁盘,经过了Server层和InnoDB存储引擎,中间掺杂着磁盘读取、日志记录、内存更新、写入磁盘。

    MySQL为什么将Server层和引擎层拆分?

    • 由MySQL架构演变而来,进而实现「解耦」的效果
    • 针对不同的场景,使用不同的存储引擎,灵活性更强
    • MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力

    MySQL主要包含2种存储引擎

    • MyISAM(不支持事务,访问速度快)
    • InnoDB(主流,支持事务)
    郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
    (0)
    用户投稿
    上一篇 2022年6月19日
    下一篇 2022年6月19日

    相关推荐

    联系我们

    联系邮箱:admin#wlmqw.com
    工作时间:周一至周五,10:30-18:30,节假日休息