BUG复现过程
在DEBUG版本下,MySQL实例是crash的,crash在 line 5643。
BUG原因分析
BUG修复方法
BUG修复也比较简单,在rename的过程中,先更改数据字典,然后调用函数清理内存中的对象,这样在重新dict_load_foreigns
的时候,就一切正常了。
MySQL官方版本在5.6.23修复了这个问题。
alter 添加和删除索引导致不一致
复现此BUG的时候需要使用DEBUG_SYNC,在alter table的过程中,add key(col2)步骤成功,而在drop key的时候InnoDB报失败。 然后导致MySQL server层对表t1的定义和InnoDB层的定义不一致。
BUG原因分析 在drop key报引擎失败的时候,MySQL server层开始回滚整个DDL语句,server层这时回滚了FRM的定义,而InnoDB成功添加的key(col2)却没有回滚。
BUG修复方法 在alter的过程中,记录每一个阶段成功的调用,在语句结束的时候,如果遇到需要回滚的statement,需要同时回滚引擎层和server层。