MySQL 的文件和 InnoDB 存储引擎的文件是相对独立的。
InnoDB 引擎有自己的专属文件,从物理文件的角度来看,主要分为表空间文件和重做日志文件。

表空间文件

InnoDB 的所有数据都存储在表空间中,默认都在 $datadir 下。
表空间是逻辑存储概念,主要分为以下几种类型:

系统表空间文件

系统表空间的文件名为 ibdata1,它存储着 InnoDB 的元数据信息:

  • Data Dictionary
  • Double Write Buffer
  • Insert Buffer/Change Buffer
  • Rollback Segments
  • Forigen Key Constraint System Tables
  • etc

在 MySQL 5.6 之前,系统表空间还存储着用户表空间和 undo 表空间。

用户表空间文件

用户表空间针对于用户创建的表,每张表对应一个 .ibd 文件,这些文件的通用路径和文件名都为$datadir/db_name/tb_name.ibd。是否启用独立表空间,由 innodb_file_per_table 控制。
独立的用户表空间可以灵活选择 row formatfile format,库或者表删除之后的空间能够回收再利用。
每张表的表空间存放着各自的聚集索引、普通索引、插入缓冲位图页等数据,其它的元数据信息(特别是插入缓冲索引页)仍在系统表空间中。
所以,单独将 .ibd 文件拷贝到另外一个 MySQL 实例上是不能直接加载使用的。

undo 表空间文件

通常称为 undo log
独立 undo 表空间从 MySQL 5.6 版本开始支持,由一个或多个可循写入的文件组成,文件名的形式为 undoNNN,主要存储着表记录修改前的旧版本的数据。
undo 更多相关的内容,会在后面章节中详细介绍。

临时表空间文件

临时表空间从 MySQL 5.7 版本开始支持,文件名是 ibtmp1
顾名思义,它主要存储那些使用 CREATE TEMPORARY TABLE 显式创建的临时表和SQL执行过程中 USE TEMPORARY TABLE 产生的内部临时表。

重做日志文件

又叫 redo log,由一个或多个可循环写入的文件组成,以 ib_log_fileN 这样的形式命名。
重做日志是物理的逻辑日志,存储着表记录修改之后的新数据。
redo 更多相关的内容,会在后面章节中详细介绍。