InnoDB表空间与日志介绍

InnoDB的正常工作使用两个重要的基于磁盘的资源:用于存储表内容的表空间,记录事物活动情况的一系列的日志文件。

InnoDB的表空间除了包含数据与索引,也包含了rollback segment。事物中修改的行,undo日志都是存储于rollback segment中的。这些信息用于在事物失败并回滚时。

如果使用单表空间(–innodb-file-per-table),那么在相应数据库目录下都有一个.ibd和.frm文件。其中,.ibd文件是该表自己的表空间,里面存的是该表的内容。(此时,共享表空间仍然需要,因为其中存放的是InnoDB数据目录和rollback segment)

使用–innodb-file-per-table选项,不会对之前已经使用共享表空间的表造成影响。那些使用共享表空间的表仍是可以正常被访问的。

除了表空间文件,InnoDB存储引擎管理着一系列的InnoDB特定的日志文件,并且包含正在进行的事物的相关信息。当客户端进行事物时,其进行的修改操作都会保存在InnoDB日志当中。

最近的日志内容是缓存在内存的。一般情况下,在事物提交的时刻,缓存于内存的日志信息 会被刷新至位于磁盘上的日志文件(log files)。

如果在修改表时MySQL Server发生了崩溃,那么日志文件可以使用日志文件进行自动恢复:当MySQL重启时,它会将记录在日志当中的改变情况反映出来,以确保这些表反映了所有已提交的事物。