博客
关于我
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删除重复数据通用SQL
    查看>>
    mysql判断某一张表是否存在的sql语句以及方法
    查看>>
    mysql加入安装策略_一键安装mysql5.7及密码策略修改方法
    查看>>
    mysql加强(1)~用户权限介绍、分别使用客户端工具和命令来创建用户和分配权限
    查看>>
    mysql加强(3)~分组(统计)查询
    查看>>
    mysql加强(4)~多表查询:笛卡尔积、消除笛卡尔积操作(等值、非等值连接),内连接(隐式连接、显示连接)、外连接、自连接
    查看>>
    mysql加强(5)~DML 增删改操作和 DQL 查询操作
    查看>>
    mysql加强(6)~子查询简单介绍、子查询分类
    查看>>
    mysql加强(7)~事务、事务并发、解决事务并发的方法
    查看>>
    MySQL千万级多表关联SQL语句调优
    查看>>
    mysql千万级大数据SQL查询优化
    查看>>
    MySQL千万级大表优化策略
    查看>>
    MySQL单实例或多实例启动脚本
    查看>>
    MySQL压缩包方式安装,傻瓜式教学
    查看>>
    MySQL原理、设计与应用全面解析
    查看>>
    MySQL原理简介—1.SQL的执行流程
    查看>>
    MySQL参数调优详解
    查看>>
    mysql参考触发条件_MySQL 5.0-触发器(参考)_mysql
    查看>>
    MySQL及navicat for mysql中文乱码
    查看>>
    MySqL双机热备份(二)--MysqL主-主复制实现
    查看>>