14.10.2.2 打开 table 时的兼容性检查

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

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

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

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

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

InnoDB: table test/t1: unknown table type 33

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

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

InnoDB 1.0 和更高版本中的文件格式 Management 功能(table 空间标记和运行时检查)使 InnoDB 能够尽快验证运行中的软件版本可以正确处理数据库中存在的 table。

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

强烈建议用户不要使用包含梭子鱼文件格式 table 的数据库文件,这些文件包含的 InnoDB 版本早于带有 InnoDB 插件的 MySQL 5.1. 可以重建这些 table 以使用羚羊格式。