从删库到跑路:基于MySQL 8的MYD、MYI、SDI数据库恢复
环境:
- 操作系统:Windows、Linux
- MySQL版本:8.0.12
- PHP版本:7.4
- 论坛系统:Dzx3.4
故障描述: 一位网友在联系我后说他不小心删库了,而且没有备份。经过询问得知他使用的是小皮面板,显然没有开启备份功能。在查询后发现自从MySQL 8.0版本开始,当用户创建数据库后,MySQL会在数据目录下生成相应的恢复文件。在MySQL之前的版本也有这个功能,但文件格式有所不同。
文件说明:
- XXX.sdi: 表结构文件
- XXX.MYD: 数据文件
- XXX.MYI: 索引文件
我们可以利用这三个文件完成数据库的恢复。
删库恢复测试:
- 首先创建一个数据库bbskali。
<code>create database bbskali;</code>
- 创建数据表并定义字段。
<code>CREATE TABLE `bbskali`.`nbkali` ( `id` INT(255) NOT NULL , `name` CHAR(255) NOT NULL , `nmuber` INT(255) NOT NULL , `age` INT(255) NOT NULL ) ENGINE = MyISAM;</code>
- 删除数据库。
- 在data目录下找到刚创建的数据库bbskali的文件夹以及相关表的文件。
- 复制这些文件,并创建新的数据库bbskali2和表nbkali(仅定义字段,不填充数据)。
- 继续前往data目录,在那里你会看到以下文件结构。对比新旧文件,我们会发现只有.sdi文件名不同。首先用新表的.MYD和.MYI文件替换旧表的文件,然后将新表的.sdi文件重命名为旧表的文件名并替换。
- 重启数据库,数据已成功恢复。
Dz3.4删库恢复: 根据以上恢复策略,我们可以尝试恢复误删的Dz数据库。但由于Dz表较多,站点数据较大,一个一个表进行恢复是不现实的。 解决方法如下:
- 重装Dz论坛系统以获得表结构。
- 复制原始站点的data目录,用其中的.MYD和.MYI文件替换新站点的文件,然后找到对应的.sdi文件并重命名后替换。
- 重启数据库。
弊端:
- 当数据表较多时,不建议使用此方法,除非别无选择。
- 无法恢复Dz插件的数据,因为没有插件的.sdi文件信息。
- 对于Dz,我们可以只恢复用户表和帖子表,其他数据可以在后台重新设置。
部分Dz表信息:
- 用户表信息:
- pre_common_member:帖子用户表
- pre_ucenter_members:uc用户表
- pre_ucenter_memberfields:用户id表
- 帖子信息表:
- pre_forum_post:帖子文章表
- pre_forum_thread:帖子内容
- pre_forum_threadimage:帖子图片
通过以上方法,你可以尝试从MySQL 8数据库的MYD、MYI、SDI文件进行数据恢复。
© 版权声明
THE END
暂无评论内容