• MySQL日志系统 - 一文贯通MySQL日志


    概述

    Mysql的日志系统是Mysql保证无论何时崩溃数据都不会丢失的关键

    众所周知Mysql是持久化的数据库, 所有的数据都是持久化到硬盘中的, 保证数据不会丢失

    Mysql保证数据不会丢失是从以下两个方面来体现的

    1. 能够恢复到任意时刻的数据状态
    2. 无论在事务提交前还是提交后崩溃都能保证数据不丢失
      • 事务过程中崩溃能够恢复到事务提交前的状态
      • 事务提交后崩溃已提交的数据不会丢失

    MySQL保证以上两个点的关键就是通过 undo log, redo log 和 binlog 这三个日志来实现的, 接下来将逐一介绍

    undo log 回滚日志

    undo log是Mysql的回滚日志, 存储的是老版本的数据

    主要作用

    1. 存储老版本的数据

      • 配合Read View和隐藏字段实现了Mysql的快照读
    2. 用于在事务执行失败的时候回滚到事务开始前的版本

    undo log 有什么类型

    undo log 有两种类型

    对于 insert 命令, undo log 记录的是新增的记录的主键, 在回滚的时候根据 undo log 中的主键去删除对应的记录即可

    对于 update / delete 命令, undo log 记录的是被修改的记录的旧数据

    Mysql中的每一行数据都有一个最新修改当前数据行的事务id回滚指针这两个字段, 当对数据行进行修改之后, undo log指针就会指向旧的这一行数据, 而新生成的这一行数据的回滚指针就会指向undo log指针当前指向的旧数据行

    • Mysql为了避免undo log指针修改指向的时候出现并发问题, 在修改之前会对undo log指针增加排他锁以保证undo log的正确写入

    undo log 什么时候删除

    undo log是用于保证事务在未提交的时候可以顺利回滚到事务开始前的状态, 当事务提交之后undo log就失去作用了, 就需要被删除

    undo log是交由Mysql中的 Purage 线程来负责删除的, purage会定期检查undo log中的deleted_bit 标志, 这个标志会在事务提交后被设置为true, pu

  • 相关阅读:
    layui 入门指南
    每日一题 901. 股票价格跨度(中等,单调栈)
    MySQL数据库介绍和部分基本操作
    CF比赛1610D. Not Quite Lee(Codeforces Global Round 17)(数学)(计数)
    java中log使用总结
    java编程培训学习的就业前景好不好
    系统日志记录的最佳实践
    基于工业级4G5G路由器大型设备远程无线监控方案
    Android NDK 之CmakeList 笔记
    正点原子linux——BSP工程管理实验-编写通用Makefile
  • 原文地址:https://blog.csdn.net/mfmfmfo/article/details/126847397