InnoDB Plugin文件格式(概述)

本文将介绍InnoDB Plugin数据表格式的基本概念。

1. 配置参数innodb_file_format

这是一个很容易混淆的概念。目前,在InnoDB Plugin(1.0.6)配置文件中innodb_file_format支持两种:Antelope/ˈæntɪləʊp/、Barracuda/ˌbærəˈkjuːdə/。他们分别是两种文件格式的代号,在未来版本中,InnoDB将继续延续这种代号机制,它们会是Antelope, Barracuda, Cheetah, Dragon, Elk, Fox等等。

Antelope_Barracuda

Antelope是Built-in-InnoDB(MySQL内置的InnoDB)支持文件格式的代号,有两种“数据表格式”(row_format):Redundant、Compact;Barracuda是InnoDB Plugin支持的文件格式,在原来的基础上新增了两种数据表格式的支持:Dynamic和Compressed。

对应关系表:

innodb_plugin_com

一般,innodb_file_format在配置文件中指定;row_format则在创建数据表时指定。

2. 新建数据表的格式、已有数据表格式

要支持新的数据表格式,我们需要在配置文件中新增配置选项:

innodb_file_format=barracuda
innodb_file_per_table = 1
innodb_strict_mode=1 #建议加上

然后,在创建数据表时,指定参数ROW_FORMAT就可以指定特定的格式了。例如:

CREATE TABLE name (column1 INT PRIMARY KEY) ENGINE=InnoDB
ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;

这里创建了一个COMPRESSED的数据表,指定压缩后页大小为4K。

一般地,我们通过SHOW CREATE TABLE就可以看到数据表的具体格式了。特别地,我们也可以通过观察ibd的文件头来确定文件的格式:

$od -t x1 -j 54 -N 4 t3.ibd #compact
0000066 00 00 00 27
0000072
$od -t x1 -j 54 -N 4 t2.ibd #compressed
0000066 00 00 00 00
0000072

3. 文件格式兼容性检查

InnoDB Plugin引入的新的文件格式,也引入较为完整的文件兼容性检查,以防止误操作非兼容的文件格式。兼容性检查一共有三类:启动数据库时、创建数据表时、访问数据表时。

3.1 在数据库启动时候,参数innodb_file_format_check(>=5.1.38)会要求InnoDB在启动时检查当前数据表的格式。设置为ON时,如果检测到不支持的格式,那么InnoDB会启动失败;设置为OFF时,检测到不支持的仅会给出警告,并不会导致启动失败。

把innodb_file_format_check设置为OFF是很危险的。在InnoDB启动后,一般需要做一些恢复工作,例如Double write buffer/Insert buffer中的数据处理(这依赖于innodb_fast_shutdown参数),试想如果成功启动,但是某些表是不支持的格式,但是InnoDB仍然安装旧版本做恢复,这可能会毁掉相关数据。

所以,一般建议innodb_file_format_check设置为ON。如果是OFF,关闭InnoDB的innodb_fast_shutdown参数务必设置成0。

3.2 除了启动时会检查兼容性外,当创建数据表时,InnoDB会依据参数InnoDB_file_format进行检查,如果创建的数据表格式高于InnoDB_file_format,则创建会失败。

3.3 当访问某个数据表(table-access)时,InnoDB也会进行兼容性检查。只要当前运行的InnoDB版本能够支持的格式,都能够被访问,无论参数InnoDB_file_format的配置。

In:

Leave a Reply

Your email address will not be published. Required fields are marked *