mysql innodb_file_format_InnoDB 文件格式管理

随着InnoDB的演化,不断有新的文件格式被应用,这些格式和先前的版本不兼容。

4.2 文件格式命名

InnoDB 插件引入了命令的文件格式和一个配置参数来启用这新特性。当前的名字是Barracuda,先前的名字是Antelope,未来的的起名将由动物的名字来标识,以升序的方式。

在当前发布中,InnoDB的每个表就占用一个表空间下的文件都有一个格式标识符。但这并不适用于系统表空间(ibdata文件),只适用于单独表空间的文件(存储用户表和索引的*.ibd文件),实际上,系统表空间被标记为最“高”的文件格式,这种格式在文件被打开时被检查。

在当前发布的InnoDB中,当你创建一个压缩表,或者一个row_format=DYNAMIC的表时,对应.ibd文件的文件头和系统数据字典中的表类型将被更新为Barracuda。为了保护反常行为,InnoDB 5.0.21和以后的版本将在表被打开时做兼容性检查。

如果一个版本的InnoDB支持一个特定的文件格式(不管是否被启用),你能访问甚至可以更新使用这个格式和先前格式的表。降级的唯一方法就是将表的数据拷贝带另外一个新的表,使用alter TABLE命令可以完成。检查一个表格式的方法就是使用show table status命令或者查询INFORMATION_SCHEMA.TABLES表。如果这个表的row_format是COMPRESSED或者是DynaMIC,则对应的表可能是Barracuda。

innodb_file_format是一个新的参数,它控制着CREATE TABLE和ALTER TABLE命令能否被用来创建依赖Barracuda支持的表。这个参数是动态的,可以在配置文件中指定或者使用set global命令改变。

4.4 文件格式兼容性

ib文件集合指的是InnoDB管理的一批文件的集合。包含下面的文件:

系统表空间(一个和更多的ibdata文件),包含内部表信息,可能包含用户数据和索引;

0个或更多的单一表空间(*.ibd文件)。

InnoDB日志文件(ib_logfile1和ib_logfile2),用户崩溃恢复和备份。

这些文件是事务一致的,并做为一个可恢复的单元,这一批文件不包括和MySQL相关的frm文件,这些frm文件包含关于InnoDB表的元数据,由MySQL排他管理,并有时和InnoDB中的内部元数据不保持同步。

如此的这文件集合也被称为一个数据库,MySQL使用database来标识一个逻辑上表的集合,其它的系统称为schema或者catalog。MySQL可以将不同数据库的多个表存放在一个单一的ib文件集合中。

InnoDB插件集成了几种检查机制来防范由于版本不兼容而可能的崩溃,检查的地点包括在服务器启动时和当你访问表时。

4.4.1 启动时文件兼容检查

InnoDB在打开文件集合时会检查是否能完全支持这个文件集合中的格式。如果系统在崩溃后重启,或者“快速关闭(innodb_fast_shutdown大于0),则可能有磁盘上的数据结构(比如重做或者恢复记录)是太新的格式。在恢复过程中,如果访问了这些格式可能会有严重的问题。

自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不能支持)。如果设置innodb_file_format_check为OFF,InnoDB插件将打开数据库,但是会有警告:

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

这是非常危险的。,如果先前数据库崩溃或者快速关闭,恢复过程可能损坏你的数据库,你只有在确保innodb_fast_shutdown=0的情况下才能设置innodb_file_format_check为OFF,这样确保恢复过程不会发生。这个参数值可能被改为UNSAFE。

innodb_file_format_check只影响数据库在打开的时候,不影响随后的操作。innodb_file_format(它指定了特定的格式)将只决定一个特定的新表是否可以创建,对数据库是否可以打开没有影响。

文件格式标记是高水位的,在服务器启动以后,如果一个“较高格式”的表被创建,或者一个存在的表被用来读或者写(假定格式是被支持的),则会增加。如果你访问一个高于当前软件所支持版本的数据库表,系统表空间格式标记将不会被更新,但是会进行表兼容性检查(并会报错)。任何时候当最高水位标记被更新以后,innodb_file_format_check也将被更新,因此SELECT @@innodb_file_format_check 将显示由当前打开的ib文件集合使用的并被当前执行软件所支持的最新的文件格式的名字。

下表显示了兼容性图:

4-1-300x149.jpg

innodb file format 指的是如果一个InnoDB文件如果是这种格式会导致的后果;

Highest file format used in ib-file set 指的是ib文件集合中最高的文件格式;

Highest file formatsupported by InnoDB 当前版本所能支持的最高版本。

4.4.2 文件格式兼容性检查

当一个表访问时,InnoDB(包括某些先前版本)将检查存放这个表的表空间是否被完全支持。

一个表空间下的所有表都有可能被读或者写(假定有权限)。系统参数 innodb_file_format 能阻止创建一个使用特定文件格式的表,即使它们被这个版本所支持,这样的设置能保证向后兼容性,但是不能阻止对受支持格式的访问。

早于5.0.21 版本的InnoDB不能可靠使用由更新的版本所创建的数据库文件。为了阻止错误和损坏,InnoDB 将在启动时检查文件兼容性。如果当前运行的版本不支持由InnoDB数据字典中表类型标识的文件格式,MySQL将报错:

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

MySQL 还将写一条日志:

InnoDB: table test/t1: unknown table type 33

早于 4.1 的InnoDB不包括文件格式标识符,早于5.0.21 的不包括表格式兼容性检查,因此没有办法来确保对早于5.0.21版本的表是否都是适当的操作。

如果你允许InnoDB 打开一个即使它并不支持的数据库(通过设置innodb_file_format_check 为OFF),表级别的检查仍然会进行。

强烈建议用户不要在先前的 InnoDB 版本中使用Barracuda 文件格式,可以降级为Antelope 格式。

4.5 辨识当前使用的文件格式

尽管你可以在一个给定的时刻启用一个给定的 innodb_file_format,除非你创建一个新表,数据库文件格式并不会改变。如果你创建了一个新表包含那个表的表空间将被标记为反应表特性的“最早的”或者“最简单的”格式。比如,如果你启用了文件格式Barracuda,并创建了一个不需要压缩的表,也没有使用row_format=DYNAMIC,则包含那个表的表空间将被标记为Antelope.

可以使用SHOW CREATE TABLE 或者 information_schema.tables 中的row_format 来看到,如果是Barracuda,则应该显示了ComPRESSED或者DynaMIC。(要注意的是row_format是一个单独的列,要忽略create_options列,它也包括row_format 字符串。)如果表空间中的表使用的不是其中任何一个值,则是Antelope。row_format 显示为RedUNDANT 或者 Compcat。

文件格式标识符作为表空间标识符(32位数字)的一部分被写到*.ibd文件中,在文件的54字节的位置(4字节长)。如果所有字节都是0,说明是Antelope文件格式,不然,表空间标志位的最低位应该被设为1,文件格式标识符在5到11位。

InnoDB 表空间文件(*.ibd文件)标记的格式被用来创建它的表和索引。要降级表空间的方式便是重新创建表和索引,在你希望降级的表上使用ALTER TABLE 命令。

未来的InnoDB 文件格式名称可能将使用下列的名称:

Antelope, Barracuda, Cheetah, Dragon, Elk, Fox, Gazelle, Hornet, Impala, Jaguar, Kangaroo, Leopard, Moose, Nautilus, Ocelot, Porpoise, Quail, Rabbit, Shark, Tiger, Urchin, Viper, Whale, X, Y and Zebra.

它们分别对应于序号0到25。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值