专业编程培训机构——完成蜕变以后轻松拿高薪
电话+V: 152079-09430 ,欢迎咨询hexdump源代码,mysql卸载后怎么找回原来建的数据库?,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]
一、mysql卸载后怎么找回原来建的数据库?
每个DBA是不是都有过删库的经历?删库了没有备份怎么办?备份恢复后无法启动服务什么情况?表定义损坏数据无法读取怎么办?
我曾遇到某初创互联网企业,因维护人员不规范的备份恢复操作,导致系统表空间文件被初始化,上万张表无法读取,花了数小时才抢救回来。
当你发现数据无法读取时,也许并非数据丢失了,可能是DBMS找不到描述数据的信息。
背景
先来了解下几张关键的InnoDB数据字典表,它们保存了部分表定义信息,在我们恢复表结构时需要用到。
SYS_TABLES描述InnoDB表信息CREATETABLE`SYS_TABLES`(`NAME`varchar(255)NOTNULLDEFAULT'', 表名`ID`bigint(20)unsignedNOTNULLDEFAULT'0', 表id`N_COLS`int(10)DEFAULTNULL,`TYPE`int(10)unsignedDEFAULTNULL,`MIX_ID`bigint(20)unsignedDEFAULTNULL,`MIX_LEN`int(10)unsignedDEFAULTNULL,`CLUSTER_NAME`varchar(255)DEFAULTNULL,`SPACE`int(10)unsignedDEFAULTNULL, 表空间idPRIMARYKEY(`NAME`))ENGINE=InnoDBDEFAULTCHARSET=latin1;SYS_INDEXES描述InnoDB索引信息CREATETABLE`SYS_INDEXES`( `TABLE_ID`bigint(20)unsignedNOTNULLDEFAULT'0',与sys_tables的id对应 `ID`bigint(20)unsignedNOTNULLDEFAULT'0', 索引id `NAME`varchar(120)DEFAULTNULL, 索引名称 `N_FIELDS`int(10)unsignedDEFAULTNULL,索引包含字段的个数 `TYPE`int(10)unsignedDEFAULTNULL, `SPACE`int(10)unsignedDEFAULTNULL, 存储索引的表空间id `PAGE_NO`int(10)unsignedDEFAULTNULL, 索引的rootpageid PRIMARYKEY(`TABLE_ID`,`ID`))ENGINE=InnoDBDEFAULTCHARSET=latin1;SYS_COLUMNS描述InnoDB表的字段信息CREATETABLE`SYS_COLUMNS`( `TABLE_ID`bigint(20)unsignedNOTNULL,与sys_tables的id对应 `POS`int(10)unsignedNOTNULL, 字段相对位置 `NAME`varchar(255)DEFAULTNULL, 字段名称 `MTYPE`int(10)unsignedDEFAULTNULL, 字段编码 `PRTYPE`int(10)unsignedDEFAULTNULL,字段校验类型 `LEN`int(10)unsignedDEFAULTNULL, 字段字节长度 `PREC`int(10)unsignedDEFAULTNULL,字段精度 PRIMARYKEY(`TABLE_ID`,`POS`))ENGINE=InnoDBDEFAULTCHARSET=latin1;SYS_FIELDS描述全部索引的字段列CREATETABLE`SYS_FIELDS`( `INDEX_ID`bigint(20)unsignedNOTNULL, `POS`int(10)unsignedNOTNULL, `COL_NAME`varchar(255)DEFAULTNULL, PRIMARYKEY(`INDEX_ID`,`POS`))ENGINE=InnoDBDEFAULTCHARSET=latin1;./storage/innobase/include/dict0boot.h文件定义了每个字典表的indexid,对应id的page中存储着字典表的数据。
这里我们需要借助undrop-for-innodb工具恢复数据,它能读取表空间信息得到page,将数据从page中提取出来。
#wgethttps://github.com/chhabhaiya/undrop-for-innodb/archive/master.zip#yuminstall-ygccflexbison#make#makesys_parser
#./sys_parser读取表结构信息
sys_parser[-h][-u][-p][-d]databases/table
stream_parser读取InnoDBpage从ibdata1或ibd或分区表
#./stream_parserYoumustspecifyfilewith-foptionUsage:./stream_parser-f<innodb_datafile>[-TN:M][-ssize][-tsize][-V|-g] Where: -h -Printthishelp -Vor-g -Printdebuginformation -ssize -Amountofmemoryusedfordiskcache(allowedexamples1G10M).Default100M -T -retrievesonlypageswithindexid=NM(N-highword,M-lowwordofid) -tsize -SizeofInnoDBtablespacetoscan.Useitonlyiftheparsercan'tdetermineitbyhimself.
c_parser从innodbpage中读取记录保存到文件
#./c_parserError:Usage:./c_parser-4|-5|-6[-dDV]-f<InnoDBpageordir>-ttable.sql[-TN:M][-b<externalpagesdirectory>] Where -f<InnoDBpage(s)>--InnoDBpageordirectorywithpages(allpagesshouldhavesameindex_id