数据库数据恢复环境:
华为云ECS网站服务器,linux操作系统;
Mysql数据库版本号5.6,数据表采用innodb作为存储引擎。
故障:
在执行数据库版本更新测试时,错误地将本应在测试库执行的sql脚本执行于生产库,导致其中8个表被truncate,4个表的少量数据被delete。DBA联系北亚数据恢复中心要求恢复被truncate的8个表以及部分数据被delete的4个表的数据。
数据库数据恢复流程:
1、由于用户ECS内有其他业务仍在运行,为保证被truncate表的底层数据不被破坏,北亚数据恢复工程师首先对mysql的data目录所在分区进行备份。
2、由于需要进行数据恢复的12个表内没有大字段类型值和myisam引擎表,北亚数据恢复工程师只需要下载获取到数据库数据恢复所必需的数据库段碎片即可。由于innodb引擎表的数据恢复必须依赖表结构信息,mysql的表结构信息存储于对应表名的.frm文件内。在本次数据恢复案例中frm文件完好可直接使用。北亚数据恢复工程师下载需要进行数据恢复的数据库表对应的frm文件。
3、分析系统表。读取数据段内系统表信息,获取需要恢复的12个表在系统表内的注册信息。
4、恢复被truncate的表。在下载完成的数据段文件内提取对应于各表的数据页,解析对应表的frm文件获取到该表的表结构信息。通过表结构信息获取到底层数据分配规则,北亚数据恢复工程师按照规则拆分数据段内二进制数据并对不同类型数据进行字符展示转换(各类整形、浮点型、时间型等),完成数据段到sql语句的转换。
5、恢复被delete数据的表。基本流程同恢复被truncate数据的表类似,不同点在于数据解析时需要提取被标注为“delete”的记录。
6、数据还原。根据解析出的表结构信息在数据库数据恢复环境中的mysql实例内创建表,并将恢复出的数据导入。
7、数据清洗。由于直接从底层抓取出的记录可能存在主键不唯一(引擎在存储时产生的临时记录)和记录重复(缓冲段)以及乱码(扫描数据段时出现特征值匹配成功但不属于该表的数据段)等情况,北亚数据恢复工程师对提取出的存在异常的记录进行人工处理。
8、数据验证。开启远程桌面,由用户亲自进行数据验证。经过用户亲自验证,被truncate和delete的表恢复出来的数据完整可用。