innodb转为infinidb

2900阅读 0评论2014-02-07 gladness
分类:Mysql/postgreSQL

由innodb转为infinidb,最先要解决的问题,就是建表语句能跑成功。由于infinidb的一些限制,只把engine=innodb改为engine=infinidb是不容易通过的。

把最近尝试由innodb转为infinidb时,建表语句遇到的问题罗列一下。

Server version: 5.1.39 Calpont InfiniDB 4.0.1-1

  1. 去掉所有AUTO_INCREMENT子句,包括列定义中的,以及创建表语句结尾的AUTO_INCREMENT=1234。
  2. 去掉所有KEY、UNIQUE KEY、PRIMARY KEY子句
  3. 去掉所有分区定义(infinidb有自动分区,可以按列值的范围来清理)
  4. timestamp换成datetime(也意味着timestamp自动更新日期的属性不能使用了)
  5. time类型不支持,换成datetime的话,可能需要应用修改
  6. 列定义中的CHARACTER SET utf8 COLLATE utf8_unicode_ci不支持,要去掉
  7. 日期时间类型的非法日期不能做作为default值,比如DEFAULT '0000-00-00 00:00:00',以及'2013-00-00 00:00:00',都会报错
  8.  varchar  NOT NULL DEFAULT ''不允许,因为字符串类型中,''与NULL被认为是相同的

本次使用的是直接下载的二进制版本,不支持innodb。目前想到的策略是小表采用myisam,大表使用infinidb,尽量避免修改应用。

同时使用两个引擎,需要看一下文档中的Cross-Engine Table Access,貌似要配置,我还没试。

再者,如果是用infinidb做出一个slave的话,可能要注意mysql5.6的binlog_checksum参数。主库如果是mysql5.6的话,要把binlog_checksum设置成none。因为infinidb使用的mysql版本较低,不支持这个特性。

压缩比:貌似infinidb没有在这方面专门下功夫,但由于没有了索引,infinidb还是比较节省空间的。本次测试与innodb占用空间的比大约是1:3

delete、insert、update是支持的
上一篇:dict_create_index_tree_step建表时cluster index创建并登记
下一篇: error C3861: '_InterlockedExchangeAdd': identifier not found