14.10.2.1 InnoDB 启动时的兼容性检查

为了防止 InnoDB 打开 ib 文件集时可能发生的崩溃或数据损坏,它会检查它是否可以完全支持 ib 文件集内使用的文件格式。如果系统在崩溃或“快速关机”(即innodb_fast_shutdown大于零)之后重新启动,则可能在“”中存在磁盘上的数据结构(例如重做或撤消条目或重复写入页)当前软件的“太新”格式。在恢复过程中,如果访问这些数据结构,则可能会对数据文件造成严重损害。文件格式的启动检查将在任何恢复过程开始之前进行,从而避免了新 table 的一致性问题或 MySQL 服务器的启动问题。

从版本 InnoDB 1.0.1 开始,系统 table 空间记录 ib 文件集一部分中任何 table 空间中任何 table 使用的“最高”文件格式的标识符或标记。对此文件格式标记进行检查由配置参数innodb_file_format_check控制,默认情况下为ON

如果系统 table 空间中的文件格式标记比特定的当前正在执行的软件支持的最高版本新或更高,并且innodb_file_format_checkON,则在启动服务器时会发出以下错误:

InnoDB: Error: the system tablespace is in a
file format that this version doesn't support

您也可以将innodb_file_format设置为文件格式名称。如果当前软件不支持指定的文件格式,这样做会阻止 InnoDB 启动。还将“高水位标记”设置为您指定的值。如果您手动“降级” ib 文件集中的所有 table,则设置innodb_file_format_check的功能(在将来的版本中)将很有用。然后,如果随后使用 InnoDB 的较早版本访问 ib 文件集,则可以在启动时依靠文件格式检查。

在某些有限的情况下,您可能要启动服务器并使用 ib 文件集,该 ib 文件集采用的新文件格式不受您所使用的软件支持。如果将配置参数innodb_file_format_check设置为OFF,InnoDB 将打开数据库,但会在错误日志中发出以下警告消息:

InnoDB: Warning: the system tablespace is in a
file format that this version doesn't support

Note

这是一个危险的设置,因为它允许恢复过程运行,如果先前的关闭是崩溃或“快速关闭”,则可能破坏数据库。如果您确定以前的关机是通过innodb_fast_shutdown=0完成的,则应仅将innodb_file_format_check设置为OFF,这样基本上就不会进行恢复过程。

参数innodb_file_format_check仅影响打开数据库时发生的情况,而不会随后影响。相反,参数innodb_file_format(启用特定格式)仅确定是否可以以启用的格式创建新 table,而对是否可以打开数据库没有影响。

文件格式标签是一个“高水位标记”,因此,如果启动“更高”格式的 table 或访问现有 table 以进行读写(假设其格式为支持的)。如果以比运行软件支持的格式更高的格式访问现有 table,则系统 table 空间标记不会更新,但是会应用 table 级兼容性检查(并且会发出错误),如第 14.10.2.2 节“打开 table 时的兼容性检查”中所述。每当高水位线被更新时,innodb_file_format_check的值也会被更新,因此命令SELECT @@innodb_file_format_check;显示当前打开的 ib 文件集中 table 所使用的,并由当前执行的 table 支持的最新文件格式的名称。软件。