☃️【Mysql学习笔记】 日志篇

type
status
date
slug
summary
tags
category
icon
password
Blocked by
Blocking
AI summary
 

Undo Log(回滚日志)

  • 作用:
    • 实现事务的原子性,提供回滚操作
    • 实现 MVCC(多版本并发控制),用于事务并发控制
  • 工作原理:
    • 当事务对数据做修改时,会先将数据的旧版本记录到 undo log
    • 如果事务需要回滚,就可以利用 undo log 中的信息将数据恢复到修改前的状态
    • 在 MVCC 中,当读取数据时,如果当前版本的数据被其他事务占用,可以通过 undo log 读取之前的历史版本

Redo Log(重做日志)

  • 作用:
    • 保证事务的持久性
    • 提供崩溃恢复能力
  • 工作原理:
    • notion image
  • 当事务修改数据时,修改会先写入内存中的缓冲池(Buffer Pool)
  • 同时,会将修改操作记录到 redo log
  • 采用 WAL(Write-Ahead Logging)技术,即先写日志,再写磁盘
  • 如果数据库崩溃,重启后可以通过 redo log 恢复尚未刷入磁盘的数据
  • 特点:
    • 循环写入,大小固定
    • 顺序写入,性能好
    • 具有 crash-safe 能力

Binlog(二进制日志)

  • 作用:
    • 主从复制
    • 数据恢复
  • 工作原理:
    • 记录所有的 DDL 和 DML 语句
    • 以事件形式记录,而不是记录数据页的更改
  • 特点:
    • 追加写入,不会覆盖以前的日志
    • 可以用于时间点恢复
    • 主从复制的基础

Redo Log 和 Binlog 的区别:

  1. 层次不同:
      • redo log 是 InnoDB 引擎层的日志
      • binlog 是 MySQL Server 层的日志
  1. 内容不同:
      • redo log 记录的是数据页的物理修改
      • binlog 记录的是逻辑日志,记录的是SQL语句的原始逻辑
  1. 写入方式:
      • redo log 是循环写入,空间固定
      • binlog 是追加写入,不会覆盖
  1. 用途不同:
      • redo log 主要用于崩溃恢复
      • binlog 主要用于主从复制和数据恢复
这三种日志各司其职,共同保证了 MySQL 的:
  • 原子性(Atomicity):通过 undo log 实现
  • 持久性(Durability):通过 redo log 实现
  • 一致性(Consistency):通过 redo log 和 undo log 共同实现
  • 隔离性(Isolation):通过 MVCC 和锁机制实现,其中 MVCC 用到了 undo log
这些日志机制是 MySQL 实现事务 ACID 特性和保证数据可靠性的重要基础。
Prev
【Mysql学习笔记】锁篇
Next
【Mysql学习笔记】事务篇
Loading...
Article List