为了防止 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
(启用特定格式)只决定是否可以在启用的格式下创建新表,而对是否可以打开数据库没有影响。
The file format tag is a “high water mark”, and as
such it is increased after the server is started, if a table in
a “higher” format is created or an existing table
is accessed for read or write (assuming its format is
supported). If you access an existing table in a format higher
than the format the running software supports, the system
tablespace tag is not updated, but table-level compatibility
checking applies (and an error is issued), as described in
Section 14.10.2.2, “Compatibility Check When a Table Is Opened”.
Any time the high water mark is updated, the value of
innodb_file_format_check
is
updated as well, so the command SELECT
@@innodb_file_format_check;
displays the name of the
latest file format known to be used by tables in the currently
open ib-file set and supported by the currently executing
software.