本文将介绍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是Built-in-InnoDB(MySQL内置的InnoDB)支持文件格式的代号,有两种“数据表格式”(row_format):Redundant、Compact;Barracuda是InnoDB Plugin支持的文件格式,在原来的基础上新增了两种数据表格式的支持:Dynamic和Compressed。
对应关系表:
一般,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的配置。
注:在主从复制中,innodb_file_format应保持一致,innodb_strict_mode和sql_mode也应保持一致。
参考:
http://www.orczhou.com/index.php/2010/03/innodb-plugin-file-format/