首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MYSQL-数据引擎(InnoDB)

MYSQL-数据引擎(InnoDB)

作者头像
运维小路
发布2025-09-30 15:39:42
发布2025-09-30 15:39:42
9000
代码可运行
举报
文章被收录于专栏:运维小路运维小路
运行总次数:0
代码可运行

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL(本章节)

PostgreSQL

MongoDB

Redis

Etcd

通过前面一个小节的介绍,我们对数据引擎有一个简单的认识,今天我们来介绍一个目前大面积使用的另外一个引擎:InnoDB。

一、核心特性与优势

1. 事务支持 (ACID Compliant)

这是 InnoDB 最核心的特性,也是它取代 MyISAM 成为默认引擎的主要原因。

  • 原子性 (Atomicity): 通过 Undo Log 实现。事务中的所有操作要么全部完成,要么全部不完成。如果事务中途失败,会利用 Undo Log 回滚到事务开始前的状态。就像银行转账,从A账户扣钱和向B账户加钱这两个操作,必须同时成功或同时失败。不可能发生钱扣了但没到账的情况。
  • 一致性 (Consistency): 通过其他三个特性(原子性、隔离性、持久性)和外键约束来共同保证数据的一致性,是其他3个特性的目的。
  • 隔离性 (Isolation): 通过 锁机制MVCC 实现。保证并发事务之间的操作互相不干扰,MySQL提供了4种事务隔离级别(读未提交、读已提交、可重复读、串行化)来平衡并发性能和数据一致性。
  • 持久性 (Durability): 通过 Redo Log 实现。一旦事务提交,其所做的修改就会永久保存在数据库中,即使系统崩溃也不会丢失。
2. 行级锁 (Row-Level Locking)
  • InnoDB 支持行级锁。当对数据进行修改(INSERT, UPDATE, DELETE)时,只会在受影响的行上加锁,而不是锁住整个表。
  • 巨大优势: 极大地提高了多用户并发操作的性能和吞吐量。多个用户可以同时读写同一张表的不同行,写操作不会阻塞读操作(基于 MVCC),写操作之间也只在同一行上才会阻塞。
3. 外键约束 (Foreign Key Support)
  • InnoDB 是 MySQL 中唯一原生支持外键约束的常用存储引擎。
  • 作用: 强制保持数据的参照完整性。当你尝试删除或更新父表(主键表)中的一条记录时,InnoDB 会根据定义的规则(RESTRICT, CASCADE, SET NULL 等)自动处理子表(外键表)中的对应数据,防止出现“孤儿数据”。
4. 多版本并发控制 (MVCC - Multi-Version Concurrency Control)
  • InnoDB 通过 MVCC 来实现非阻塞读。这是实现高并发性能的关键技术。
  • 工作原理: 它为每一行数据维护了多个版本(通常是两个隐藏字段:创建版本号和删除版本号)。当一个事务开始时,它只能看到在它开始之前就已经提交的数据版本(通过 Undo Log 构建),而看不到其他未提交事务或在其之后提交的事务所做的修改。
  • 效果读操作不会阻塞写操作,写操作也不会阻塞读操作,这使得 InnoDB 即使在有大量读写混合操作的情况下也能保持良好的性能。
5. 崩溃恢复 (Crash Recovery)
  • InnoDB 拥有强大的崩溃恢复能力,这得益于其 Write-Ahead Logging (WAL) 策略。
  • 关键组件
    • Redo Log (重做日志): 事务提交时,会先将所有修改信息写入 Redo Log(顺序写入,速度很快),然后再慢慢地将数据页刷新到磁盘。如果数据库发生崩溃,重启后 InnoDB 会读取 Redo Log,重新执行(Redo)那些已提交但尚未写入数据文件的事务,从而保证持久性。
    • Undo Log (回滚日志): 用于回滚未提交的事务和实现 MVCC。
  • 这个机制保证了数据库在遇到意外关机等故障后,数据不会丢失,并能快速恢复到一致状态。

二、物理存储结构

  • 表结构: 每张 InnoDB 表在磁盘上对应一个 .frm 文件(存储表定义,MySQL 8.0 后移至数据字典)和一个 表空间
  • 表空间 (Tablespace)
    • 更容易回收磁盘空间(删除表后空间会释放给操作系统)。
    • 便于备份和恢复单张表。
    • 优化 OPTIMIZE TABLE 操作。
    • 系统表空间 (The System Tablespace): 默认包含所有表的数据字典Undo Logs,以及(在旧配置中)所有表和索引的数据。对应文件通常是 ibdata1
    • 独立表空间 (File-Per-Table Tablespaces)强烈推荐启用(通过 innodb_file_per_table=ON)。启用后,每张表的数据和索引会单独存储在一个 .ibd 文件中。这样做的好处是:
      • 更容易回收磁盘空间(删除表后空间会释放给操作系统)。
      • 便于备份和恢复单张表。
      • 优化 OPTIMIZE TABLE 操作。
代码语言:javascript
代码运行次数:0
运行
复制
#前面是myisam引擎,后面是innodb引擎
-rw-r----- 1 mysql mysql   8672 Sep 16 21:35 myisam_table.frm
-rw-r----- 1 mysql mysql      0 Sep 16 21:35 myisam_table.MYD
-rw-r----- 1 mysql mysql   1024 Sep 16 21:35 myisam_table.MYI
-rw-r----- 1 mysql mysql   8646 Sep 16 21:34 users.frm
-rw-r----- 1 mysql mysql 114688 Sep 16 21:34 users.ibd

三、与 MyISAM 的对比总结

特性

InnoDB

MyISAM

事务

支持 (ACID)

不支持

锁机制

行级锁

表级锁

外键

支持

不支持

并发性能

非常高 (MVCC)

有限 (表锁制约)

COUNT(*)

需要扫描表或索引(较慢)

非常快(存储了精确行数)

全文索引

MySQL 5.6+ 支持

支持(较早版本更好)

存储文件

.frm + .ibd (独立表空间) 或 ibdata1

.frm, .MYD (数据), .MYI (索引)

崩溃恢复

优秀 (Redo/Undo Log)

较差,易损坏

主要应用

绝大多数场景:OLTP、高并发、需要事务

只读/读远大于写、不需要事务、全文搜索(旧版)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB
    • 一、核心特性与优势
      • 1. 事务支持 (ACID Compliant)
      • 2. 行级锁 (Row-Level Locking)
      • 3. 外键约束 (Foreign Key Support)
      • 4. 多版本并发控制 (MVCC - Multi-Version Concurrency Control)
      • 5. 崩溃恢复 (Crash Recovery)
    • 二、物理存储结构
    • 三、与 MyISAM 的对比总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档