昨天,我专用服务器的硬盘崩溃了。我唯一的选择是在更换新硬盘之前保存我所能做的。
我唯一可以保存的是/var/lib/mysql
文件夹。现在我有一个新的硬盘驱动器,运行一个新的MySQL数据库,但是空的。我想从我拥有的数据库中恢复数据。
我尝试了几件事,并通过互联网阅读InnoDB导出并不像复制所有/var/lib/mysql
文件夹那么容易,所以我不确定我有什么解决方案。
我尝试用new替换新的/var/lib/mysql
文件夹,但现在mysqld将无法运行。错误日志看起来很多like this,但添加innodb_force_recovery = 1
根本没有帮助。
现在我有点失落,没有选择。最近有人遇到过类似的事吗?
由于
答案 0 :(得分:1)
有一个工具可以从损坏的磁盘https://launchpad.net/undrop-for-innodb中检索MySQL数据库。
我希望您仍然可以将旧硬盘连接到服务器或至少从中获取图像。
下载最新版本并进行编译。你需要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中加载转储。