数据库数据恢复环境:
华为云ECS,linux操作系统;
mysql数据库,实例内数据表默认存储引擎为innodb。

数据库故障:
在执行数据库版本更新测试时,用户误将本应在测试库测试的sql脚本执行在生产库中,导致局部表被truncate,局部表内大量数据被delete。

数据库复原过程:

1、因为该ECS内有其余业务在失常运行中,为防止被truncate表的底层数据不被毁坏,首先镜像备份mysql数据库data目录所在分区。

2、因为须要复原的被truncate表不存在大字段类型值和myisam引擎表,数据恢复工程师应用工具扫描数据段并下载复原数据所必须的mysql数据库段碎片。因为innodb引擎表的数据恢复必须依赖表构造信息,mysql的表构造信息存储于对应表名的.frm文件内。通过检测发现在本案例中的.frm文件完整,可间接应用。下载须要的表对应的.frm文件。

3、读取数据段内零碎表信息,获取须要复原的表在零碎表内的注册信息。

4、在下载实现的数据段文件内提取对应于各表的数据页,解析对应表的.frm文件获取到该表的表构造信息。通过表构造信息获取到底层数据调配规定,依照规定拆分数据段内二进制数据并对不同类型进行字符展现转换(各类整型、浮点型、工夫型等),实现数据段到sql语句的转换。

5、复原被delete数据的表,过程和复原truncate表的相似,不同点在于解析数据时须要提取被标注为“delete”的记录。

6、依据解析出的表构造信息在环境中的mysql实例内创立表,并将复原出的数据导入。

7、因为间接从底层抓取出的记录可能存在主键不惟一(引擎在存储时产生的长期记录)和记录反复(缓冲段)以及乱码(扫描数据段时呈现特征值匹配胜利但不属于该表的数据段)等状况,提取出的记录可能存在异样,须要北亚企安数据恢复工程师手动解决。

8、开启远程桌面,由用户验证数据的准确性和残缺度。通过重复验证,truncate表和delete记录的表都残缺复原。