为了防止 InnoDB 打开 ib 文件集时可能发生的崩溃或数据损坏,它会检查它是否可以完全支持 ib 文件集中使用的文件格式。如果系统在崩溃或“快速关闭”
(即innodb_fast_shutdown
大于零)后重新启动,则磁盘上的数据结构(例如重做或撤消条目,或双写页面)可能处于
“太-新”当前软件的格式。在恢复过程中,如果访问这些数据结构,可能会对您的数据文件造成严重损坏。文件格式的启动检查发生在任何恢复过程开始之前,从而防止新表的一致性问题或 MySQL 服务器的启动问题。
从版本 InnoDB 1.0.1 开始,系统表空间记录一个标识符或标记,用于作为 ib 文件集一部分的任何表空间中的任何表使用的“最高”文件格式。针对此文件格式标记的检查由配置参数控制
innodb_file_format_check
,这是ON
默认设置。
如果系统表空间中的文件格式标记比当前正在执行的特定软件支持的最高版本更新或更高,并且如果
innodb_file_format_check
是
ON
,则在启动服务器时会发出以下错误:
InnoDB: Error: the system tablespace is in a
file format that this version doesn't support
您还可以设置
innodb_file_format
为文件格式名称。如果当前软件不支持指定的文件格式,这样做会阻止 InnoDB 启动。它还将“高水位线”设置为您指定的值。如果您手动“降级”一个 ib 文件集中的所有表,设置的能力
innodb_file_format_check
很有用(对于未来的版本)
。如果您随后使用旧版本的 InnoDB 访问 ib 文件集,则可以依赖启动时的文件格式检查。
在某些有限的情况下,您可能想要启动服务器并使用新文件格式的 ib 文件集,而您正在使用的软件不支持该格式。如果将配置参数设置
innodb_file_format_check
为
OFF
,InnoDB 打开数据库,但会在错误日志中发出此警告消息:
InnoDB: Warning: the system tablespace is in a
file format that this version doesn't support
这是一个危险的设置,因为它允许运行恢复过程,如果之前的关闭是意外退出或“快速关闭” ,则可能会损坏您的数据库。如果您确定之前的关闭是通过 完成的
,那么您应该只设置
innodb_file_format_check
为
,这样基本上就不会发生任何恢复过程。
OFF
innodb_fast_shutdown=0
该参数
innodb_file_format_check
仅影响打开数据库时发生的情况,而不会影响随后发生的情况。反之,该参数
innodb_file_format
(启用特定格式)只决定是否可以在启用的格式下创建新表,而对是否可以打开数据库没有影响。
文件格式标签是一个“高水位线”,因此它会在服务器启动后增加,如果创建一个“更高”格式的表或访问现有表进行读取或写入(假设其格式是支持的)。如果您以高于运行软件支持的格式访问现有表,则系统表空间标记不会更新,但会应用表级兼容性检查(并发出错误),如
第 14.10.2.2 节所述,“打开表时的兼容性检查”。任何时候更新高水位线,值
innodb_file_format_check
也已更新,因此该命令SELECT
@@innodb_file_format_check;
显示已知由当前打开的 ib 文件集中的表使用并受当前执行的软件支持的最新文件格式的名称。