hexdump源代码,mysql卸载后怎么找回原来建的数据库?

bczs5722

时间 2024年3月13日 预览 27

专业编程培训机构——完成蜕变以后轻松拿高薪

电话+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

Copyright2023未知推广科技
拨打电话拨打电话
Copyright2023未知推广科技