当我们对5.5版本的备份集进行还原的时候,xtrabackup crash 了,报错信息如下:

从crash的信息,可以定位的crash的代码点

分析调用堆栈,是xtrabackup在恢复数据的时候,启动了内嵌的 InnoDB 引擎,在活跃事务回滚的时候,会将备份时候存在的临时表全部 drop 掉。在删除表的时候,除了要删除表本身,还需要删除在 InnoDB 系统表中的记录,删除记录是通过内部执行sql的方式做的,其中有这么一段sql

SYS_TABLESPACES 和 SYS_DATAFILES 这2个系统表是在5.6中才有的,5.5是没有的,所以在调用 的时候就打不开 SYS_TABLESPACES 表,导致CRASH。

  1. 代码修复,用这里提供的方法;

从上面的分析可以得到,要触发这个bug,需要这些条件:

  1. PXB版本是2.2以上
  2. MySQL版本是5.5/5.1

当满足上面这些条件,恢复数据就会crash。