[MySQL] 02 日志系统-45讲

日志模块

redolog

  • WAL技术(Write-Ahead Logging):先写日志,再写磁盘;

    当记录更新时,InnoDB引擎先把记录写到 redo log,并更新内存,更新算完成了;InnoDB会在适当的时候,将操作记录更新到磁盘;

  • redo log的文件结构
    • 一组四个文件,每个文件1GB;
    • 循环写入,write pos 到checkpoint 之间用来记录新记录,如果write pos达到checkpoint则需要先,更新一部分到磁盘,已腾出空间;
      redo log文件示意图
  • crash-safe:保证数据库异常重启,之前提交记录不会丢失的能力;

binglog

  • 与 redo log的区别
    • redo log 是 InnoDB 特有的;binglog是Server层实现的,所有引擎都可以使用;
    • redo log物理日志;binlog 逻辑日日志;
    • redo log循环写;binlog追加写入;

日志写入流程

执行以下更新语句:

update T set c=c+1 where ID=2;

update 语句执行流程

  • 执行器通过引擎取ID=2的记录,先查内存,再查磁盘;
  • 执行器执行计算及写入操作;
  • 引擎将新数据写入内存,同时更新到redolog中,redo log处于 prepare状态
  • 执行器生成 binlog,并写入磁盘
  • 调用引擎的提交事务接口,将redo log改为 commit 状态,完成提交;

两阶段提交

为了保证 redo log 和 binlog 都可以表示事务的提交状态,两阶段提交可以让这两个状态在逻辑上一致;

  • 先写 redo log后写 binlog: 写完 redo log之后,异常重启,会将redo log中的记录写入磁盘,此时,无法通过binlog还原;
  • 先写 binlog 后写 redolog:写完 bin log后,异常重启 ,由于没写 redo log,磁盘中不会写入,故无法通过bin log还原;
posted on 2024-07-09 16:42  流沙何  阅读(5)  评论(0编辑  收藏  举报