02.mysql日志系统

再言,大家一定要用md记笔记,他他他实在是太好用了!

日志系统

  • 1.查询语句的流程更新语句等同样会走一遍

  • 2.与查询不同,更新流程涉及到redo log(重做日志),和binlog(归档日志)。


1.重做日志 redo log(引擎层特有

  • 1.WAL技术:全称为WriteAhead Logging,流程是日志>>磁盘

  • 2.有记录需要更新,lnnoDB先把记录写到redo log,并更新内存。
    lonnDB引擎适当时,会将操作记录更新到磁盘内,更新会在系统空闲时候

  • 3.redo log大小固定,可以配置组文件,从头写到尾,从尾再到头,若四个组如图
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fz4q2e7S-1640873546313)(https://note.youdao.com/yws/res/f/WEBRESOURCE8e461219dd21288ed4d9d60fdaf6497f)]

  • 4.write pos记录当前位置,写到3末尾回到0
    checkpoint是当前在’去除’的位置,将记录更新到数据文件
    空着的部分,可以记录新的操作,若去除操作追上的操作,不再执行去除操作,推进的操作。

  • [] 5.redo log的存在可以lnnoDB保证即使数据库发生异常重启 ,之前提交的数据也不会丢失,这个能力被称为crash-safe


2.redo log 与 binlog(servier层特有)的区别

  • [] 1.binlog是server层特有所有引擎都可以使用,redo log是lnnoDB引擎特有的

  • [] 2.redo log是物理日志 ,binlog是逻辑日志,如 ID=1的行a字段加1

  • [] 3.redo log是循环的,空间会用完
    binlog是追加写入的,写到一定大小到下一个,不会覆盖以前的日志


3.InnoDb引擎执行增删语句内部流程

  • 1.执行器找到特定行。引擎用树搜索选中某一行如(id==2的行),如果该行所在的数据存在内存,则返回执行器,否则从磁盘读入内存,再次返回

  • 2.执行器拿到引擎给的行数据,若某个字段加1,则实际是一行新的数据,在调用引擎写入新数据

  • 3.引擎将新数据更新到内存,同时操作记录到redo log,此时redo log处于准备状态(prepare),告知执行器执行完毕,随时准备提交事务

  • 4.执行器生成该操作的binlog,将binlog写入磁盘

  • 5.执行器调用引擎的提交事务接口,将写入的redo log改成提交状态(commit),更新完成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WqCjpDiY-1640873546315)(https://note.youdao.com/yws/res/a/WEBRESOURCE0a8416549cdd913b912b5d0713146a5a)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值