原创转载请注明出处
<人力资源/>
报错如下MYSQL不能正常启动
21409 10:39:05 2017-09-22[注]InnoDB:数据库不能正常关机! 21409 10:39:05 2017-09-22[注]InnoDB:开始崩溃恢复。 21409 10:39:05 2017-09-22[注]InnoDB:阅读从.ibd文件表空间信息… 21409 10:39:05 2017-09-22[错误]InnoDB:空间id fsp头1416128883,但在页眉824195850
我曾经写过这样一个文章如下:
InnoDB:错误:空间id和n页:存储在页面吗?
http://blog.itpub.net/7728585/viewspace-2121548/
但是上面的文章只是人为模拟,实际上在生产情况中严重得多,基本是块的物理顺坏,今天又有网友问我这个问题,实际上遇到这种问题一般都涉及到块的物理损坏了,修复的可能性并不大,我们来看看源码抛错位置:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//* * 从第一页读取空间id表空间。 @return空间id, ULINT定义如果错误*/ulint fsp_header_get_space_id (/*====================*/const page_t *页面)/* ! & lt;:第一页的表空间*/{ ulint fsp_id; ulint id; fsp_id=mach_read_from_4 (FSP_HEADER_OFFSET + + FSP_SPACE_ID页); id=mach_read_from_4 (+ FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID页); DBUG_EXECUTE_IF (“fsp_header_get_space_id_failure”, id=ULINT_UNDEFINED;); 如果(id !=fsp_id) { ib:错误()& lt; & lt;“空间ID在fsp头是“& lt; & lt;fsp_id & lt; & lt;在页眉”,但“& lt; & lt;id & lt; & lt;“。”; 返回(ULINT_UNDEFINED); } 返回(id); }
-
<李>
FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID:页面HRADER中存储了空间id在34后4字节,也就对应了报错中的但在页眉824195850
李>
<李>
FSP_SPACE_ID:文件空间头中存储了空间id在38字节后4个字节,也就对应了报错中id在fsp头1416128883的空间
李>
文件空间头是每一个表空间的第一个块才会有的,存储的信息如下:
/*空间头============文件空间头数据结构:此结构中包含的数据 第一页的一个空间。这个头的空间保留在每一个程度 描述符的页面,但使用alt="(误差)空间id fsp头但在页眉一列“>(错误)空间id fsp头但在页眉一列