Documentation Home

14.10.2.2 打开表时的兼容性检查

首次访问表时,InnoDB(包括 InnoDB 1.0 之前的一些版本)检查存储表的表空间的文件格式是否得到完全支持。此检查可防止在遇到使用“太新数据结构的 表时发生的崩溃或损坏。

可以读取或写入使用版本支持的任何文件格式的所有表(假设用户具有足够的权限)。系统配置参数的设置 innodb_file_format可以防止创建使用特定文件格式的新表,即使给定版本支持该文件格式。这样的设置可能用于保持向后兼容性,但它不会阻止访问任何使用受支持格式的表。

如果在创建表时使用了新的文件格式,则低于 5.0.21 的 MySQL 版本无法可靠地使用由较新版本创建的数据库文件。为了防止各种错误情况或损坏,InnoDB 在打开文件时检查文件格式兼容性(例如,在第一次访问表时)。如果当前运行的InnoDB版本不支持InnoDB数据字典中表类型标识的文件格式,MySQL会报如下错误:

ERROR 1146 (42S02): Table 'test.t1' doesn't exist

InnoDB 还将一条消息写入错误日志:

InnoDB: table test/t1: unknown table type 33

表类型应等于表空间标志,其中包含 第 14.10.3 节“识别正在使用的文件格式”中讨论的文件格式版本。

MySQL 4.1 之前的 InnoDB 版本在数据库文件中不包含表格式标识符,而 MySQL 5.0.21 之前的版本不包括表格式兼容性检查。因此,如果使用较新文件格式的表与 5.0.21 之前的 InnoDB 版本一起使用,则无法确保正确操作。

InnoDB 1.0 及更高版本中的文件格式管理功能(表空间标记和运行时检查)允许 InnoDB 尽快验证软件的运行版本是否可以正确处理数据库中存在的表。

如果您允许 InnoDB 打开包含其不支持格式的文件的数据库(通过将参数设置 innodb_file_format_checkOFF),则本节中描述的表级检查仍然适用。

强烈建议 用户不要使用包含 Barracuda 文件格式表的数据库文件,以及带有 InnoDB 插件的 MySQL 5.1 之前的 InnoDB 版本。重建此类表以使用 Antelope 格式是可能的。