zoukankan      html  css  js  c++  java
  • mysql 一次更新语句是如何执行的

    1,执行器通过引擎查找到需要更新的数据

    2,数据已经在内存直接返回,否则从磁盘中读入到内存中

    3,执行器中 将数据更新

    4,引擎将新数据 写入内存中,同时写入redo log中 事务处于prepare状态 。

    5,引擎告知执行器,执行完成。执行器将这个操作的bin log 写入磁盘

    6,执行器调用提交事务接口,提交事务。
    过程中涉及到的redo log 和bin log

    mysql 的WAL技术 write ahead logging 写入之前还记录日志

    redo log 记录最新数据缓存。mysql更新一条数据并不是直接更新到磁盘中,首先记录到redo log,内存中。

    然后在空闲时,将redo log中的数据写入磁盘。这样如果系统崩了,内存中的数据,未提交的可以通过redo log 恢复

    redo log中的日志是有大小限制的。类似于环形,write pos是写入的位置,chekpoint是磁盘刷新的位置。

    当磁盘内容满了,即write pos 与chek point遇见时。刷新部分数据到磁盘,同时删除相应的redo log,腾出空间。

    bin log记录的是每次DDL和DML的操作动作。

    在数据误操作时,可以通过最新备份数据+bin log 恢复成想要的状态

    二阶段提交

    在上图中可以发现最后三步中,redo log 经历了preparing和commit两种状态.称为两阶段提交

    为了防止在宕机的过程中redo log 与 binlog记录的信息不一致.

  • 相关阅读:
    属性绑定与双向数据绑定
    vue基础
    tp5提交留言入库
    tp5表单提交
    TP5分页
    TP5模板与数据组合
    vue3.x使用Proxy做双向数据绑定总结
    vue2.x响应式原理总结
    HTML5移动端自适应解决方案
    springMVC实现文件上传
  • 原文地址:https://www.cnblogs.com/luoying/p/12083792.html
Copyright © 2011-2022 走看看