昨天,我的专用服务器的硬盘崩溃了。我唯一的选择就是在更换新硬盘之前尽我所能保存。
我唯一可以保存的是/var/lib/mysql
文件夹。现在我有一个新的硬盘驱动器,其中运行着一个新的 MySQL 数据库,但是是空的。我想从我拥有的数据库中恢复数据。
我尝试了几件事,并在互联网上了解到 InnoDB 导出并不像复制所有 /var/lib/mysql
文件夹那么容易,所以我不确定我有什么解决方案.
我尝试用新文件夹替换新的 /var/lib/mysql
文件夹,但现在 mysqld 无法运行。错误日志看起来很多like this ,但是添加 innodb_force_recovery = 1
根本没有帮助。
现在我有点迷失了,别无选择。最近有人遇到过类似的事情吗?
谢谢
最佳答案
有一个工具可以从损坏的磁盘中检索MySQL数据库https://launchpad.net/undrop-for-innodb .
我希望您仍然有连接到服务器的旧硬盘驱动器或至少有从中获取的图像。
下载最新版本并编译。您需要 gcc、flex 和 bison 作为依赖项。
假设您已将旧的(损坏的)磁盘附加为/dev/sdb
首先,需要扫描磁盘并找到InnoDB页面
./stream_parser -f /dev/sdb
然后需要恢复InnoDB字典才能知道表名->index_id对应关系。请参阅"Recover InnoDB dictionary"了解详情。
您还需要表结构。从一些旧备份中获取它。 (其他选项是从 .frm 文件或 InnoDB 字典恢复结构)
当你知道表结构和表的index_id时,你可以从InnoDB页面中提取表记录:
./c_parser -6f pages-actor.ibd/FIL_PAGE_INDEX/0000000000002655.page -t actor.sql
actor.sql是CREATE TABLE语句
c_parser 将生成 LOAD DATA INFILE 命令以将转储加载回 MySQL。
关于mysql - InnoDB 导出损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25015371/