我的一台机器昨天坏了,结果我在那台机器上重新安装了窗户。它有一个mysql服务器。现在有没有办法从那台机器中恢复mysql数据。有两个表,其中有一些重要的数据没有备份。
任何帮助都将不胜感激。
发布于 2018-07-02 14:18:30
在做任何事情之前,请确保没有任何东西可以覆盖磁盘上的数据。请尽快停止对磁盘的所有写入。卸载,将其从服务器中取出--无论是适用的还是可行的。将磁盘插入64位Linux机器。
然后你需要从这个磁盘上取一张图像。这份工作我更喜欢dd。它随处可见,存储图像。
dd if=/dev/sdb of=/path/on/sda/faulty_disk.img conv=noerror其中/dev/sdb是带有数据的磁盘,而/path/on/sda/faulty_disk.img是另一个磁盘上的路径,足够大以存储映像。如果您收到任何磁盘读取错误,conv=noerror将忽略它。
如果您喜欢远程存储图像,请查看https://twindb.com/take-image-from-corrupted-hard-drive/,它将描述更多选项。
您需要在图像上找到InnoDB页面。stream_parser工具是这样做的:
./stream_parser -f /path/on/sda/faulty_disk.img该工具的结果将是一个目录pages-faulty_disk.img,其中包含按页面类型和index_id排序的InnoDB页。InnoDB将表存储在索引中。表本身存储在PRIMARY索引中,次要索引单独存储。要恢复数据,我们需要从主要索引中提取记录。现在,InnoDB通过index_id标识索引,而我们人类知道表名。要为每个表找到index_id,您需要先还原InnoDB字典。您可以检查博客文章或脚本recover_dictionary.sh从undrop工具包。
现在,假设您为每个表找到了index_id,并且在pages-faulty_disk.img/FIL_PAGE_INDEX/<index_id>.page中有一个相应的索引文件。
要从索引中提取记录,您需要知道表模式,因为InnoDB没有将模式存储在索引中。我希望您可以通过旧的备份,或者从安装脚本中获得模式。最坏的情况是你可以尝试从InnoDB字典恢复架构。
当您拥有架构和index_id时,您可以从索引生成文本转储。
./c_parser -6f pages-faulty_disk.img/FIL_PAGE_INDEX/0000000000000015.page -t sakila/actor.sql > dumps/default/actor 2> dumps/default/actor_load.sql显然,sakila.actor只是一个例子。然后查看文本转储dumps/default/actor,您可以使用存储在dumps/default/actor.sql中的SQL命令加载它。工具页还引用了一些可能有用的其他教程。数据恢复非常不可预测,因此您必须熟悉该工具和过程。
希望这能有所帮助。
https://dba.stackexchange.com/questions/211109
复制相似问题