Author:
提要
长久以来,server层和InnoDB层都保存了表的元数据,server使用frm文件保存了column,data_types等信息,而InnoDB使用data dictionary来保存meta data。
由于server层使用文件系统,而InnoDB使用事务引擎,所以经常会存在两者不一致的情况,比如:
create table的过程中实例crash
alter table过程中实例crash
具体可以参见:http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting-datadict.html 包括相关的解决方法。
改进
MySQL 后续的版本准备做相关的改进:
使用new Data Dictionary,去掉frm文件,目前还在MySQL lab版本中。
而在MySQL 5.7的版本中,以下的系统表已不再使用MyISAM,而使用InnoDB引擎保存数据:
变化
问题
由于去掉frm文件使用native InnoDB-based Data Dictionary的特性还在lab环境中酝酿,期待中。
无论如何,提升failure recovery的水平,对于使用者来说,终归是好事情!