mysql - InnoDB 导出损坏

标签 mysql innodb

昨天,我的专用服务器的硬盘崩溃了。我唯一的选择就是在更换新硬盘之前尽我所能保存。

我唯一可以保存的是/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/

相关文章:

php - 先前插入的行在调用 PHP 脚本时消失

php - 为什么我的更新声明和表格不起作用?

php - 如何向数据库中插入一些与另一行相同的信息?

php - Pressflow innodb数据库挂起

mysql innodb 和 myisam 之间的更新时间

mysql - 在innoDB中使用触发器安全吗?

mysql - 如何显示多个表中包含特定值的行

php - 如何阻止 Doctrine 引用数字?

mysql - 网站 build 者(如 wix/squarespace)似乎不提供数据库/MySql。但我的软件必须检查用户是否付费

mysql - 如何基于解释/索引提高查询性能