博客
关于我
MySQL底层概述—2.InnoDB磁盘结构
阅读量:794 次
发布时间:2023-02-12

本文共 1705 字,大约阅读时间需要 5 分钟。

InnoDB 存储结构深入解析

InnoDB 是 MySQL 中最常用的关系数据库引擎,其核心存储结构设计非常高效。以下将从基础到高级功能,全面解析 InnoDB 的存储结构。


1. InnoDB 磁盘结构

InnoDB 的磁盘主要包含以下几个关键组件:

  • 表空间 (Tablespaces)
    • 包括系统表空间、独立表空间、撤销表空间、临时表空间等多种类型。
  • InnoDB 数据字典 (Data Dictionary)
    • 存储数据库表、索引和其他元数据信息。
  • 双写缓冲区 (Double Write Buffer)
    • 用于解决部分页失效问题,确保数据写入磁盘的可靠性。
  • 重做日志 (Redo Log)
    • 记录数据库事务的修改操作,保障事务的持久性。
  • 撤销日志 (Undo Log)
    • 记录事务回滚所需的信息,保证事务的原子性。

2. 表空间 (Tablespaces)

2.1 系统表空间 (System Tablespace)

  • 包含 InnoDB 数据字典、双写缓冲区、撤销日志等核心组件。
  • 默认路径为 ibdata1,大小可通过 innodb_data_file_path 参数配置。

2.2 独立表空间 (File-Per-Table Tablespaces)

  • 每个表拥有独立的数据文件,文件名为 .ibd,默认存储于数据库目录。
  • 使用 innodb_file_per_table 参数启用。

2.3 常规表空间 (Regular Tablespaces)

  • 通用表空间,支持多个表共享,文件大小可自动扩展。

2.4 撤销表空间 (Undo Tablespaces)

  • 存储撤销日志,用于事务回滚。
  • 默认存储于系统表空间中,8.0 版本后可配置独立存储。

2.5 临时表空间 (Temporary Tablespaces)

  • 存储临时表和磁盘内部临时表。
  • 8.0 版本后默认存储于 ibtmp1 文件中。

3. 数据字典 (Data Dictionary)

3.1 MySQL 8.0 之后

  • 数据字典信息存储在 InnoDB 系统表空间中,不再依赖 .frm 文件。
  • 提供原子 DDL 操作,提升数据一致性。

4. 双写缓冲区 (Double Write Buffer)

4.1 什么是双写缓冲区?

  • InnoDB 在写入数据时,先将脏页存入双写缓冲区,再写入磁盘。
  • 确保数据写入可靠,防止磁盘故障导致数据丢失。

4.2 数据双写流程

  • 写入缓冲池中的脏页。
  • 复制脏页至双写缓冲区。
  • 按顺序写入磁盘。
  • 写入各表独立表空间。
  • 4.3 为什么写两次?

    • 第一次顺序写入共享表空间。
    • 第二次随机写入独立表空间,确保数据完整性。

    5. 重做日志 (Redo Log)

    5.1 WAL 机制

    • 写前日志(Write-Ahead Logging),确保数据持久性。

    5.2 重做日志格式

    • 物理日志:记录具体数据页修改。
    • 逻辑日志:记录事务操作的逻辑。

    5.3 重做日志写入机制

    • 将日志缓冲区内容写入磁盘,确保数据持久性。
    • 支持多个文件组,循环使用。

    6. 撤销日志 (Undo Log)

    6.1 作用

    • 提供事务回滚和多版本控制(MVCC)。
    • 记录事务开始前的数据状态。

    6.2 工作原理

    • 事务提交前记录数据变化。
    • 事务回滚时利用撤销日志恢复数据。

    7. 二进制日志 (Binlog)

    7.1 基本概念

    • 记录数据库更新操作,用于主从复制和数据恢复。

    7.2 模式

    • ROW 模式:记录每行数据修改。
    • STATEMENT 模式:记录 SQL 语句。
    • 混合模式:结合 ROW 和 STATEMENT 模式。

    7.3 写入机制

    • 写入缓冲区 → 系统缓存 → 磁盘。
    • 支持异步和同步刷盘。

    8. 新版本特性

    8.1 MySQL 5.7

    • 支持独立撤销表空间和临时表空间。
    • 动态调整 Buffer Pool 大小。

    8.2 MySQL 8.x

    • 数据字典和撤销日志完全分离。
    • 临时表空间支持多文件和索引。
    • Double Write Buffer 从共享表空间中分离。

    InnoDB 的存储结构设计充分体现了高可用性和高扩展性,适用于大规模数据存储和高并发场景。

    转载地址:http://uydfk.baihongyu.com/

    你可能感兴趣的文章
    mysql导入(ibd文件)
    查看>>
    Mysql工作笔记006---Mysql服务器磁盘爆满了_java.sql.SQLException: Error writing file ‘tmp/MYfXO41p‘
    查看>>
    MySQL工具1:mysqladmin
    查看>>
    mysql常用命令
    查看>>
    MySQL常用命令
    查看>>
    mysql常用命令
    查看>>
    MySQL常用指令集
    查看>>
    mysql常用操作
    查看>>
    MySQL常用日期格式转换函数、字符串函数、聚合函数详
    查看>>
    MySQL常见函数
    查看>>
    MySQL常见架构的应用
    查看>>
    MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
    查看>>
    MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
    查看>>
    MySQL常见约束条件
    查看>>
    MySQL常见错误
    查看>>
    MySQL常见错误分析与解决方法总结
    查看>>
    mysql并发死锁案例
    查看>>
    MySQL幻读:大家好,我是幻读,我今天又被解决了
    查看>>
    MySQL底层概述—1.InnoDB内存结构
    查看>>
    MySQL底层概述—2.InnoDB磁盘结构
    查看>>