MySQL数据库已损坏

时间:2014-02-17 20:07:10

标签: mysql sql database innodb corrupt-data

我们在Windows Server 2008 R2 KVM VPS上运行MySQL数据库5.5服务器,我们的系统会根据需要自动为客户设置新数据库。一个完全独立的驱动器/分区昨天用完了空间(没有与MySQL数据库关联的文件),但似乎已经破坏了MySQL数据库。

在查看日志文件时,我可以看到InnoDB已损坏但无法解决问题是什么或如何解决它。任何人都可以帮助解释这些错误是什么意思所以我可以修复它吗?

Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
00000001401198BD    mysqld.exe!my_osmaperr()
000000014011E79A    mysqld.exe!my_osmaperr()
0000000140159697    mysqld.exe!my_osmaperr()
0000000140159F53    mysqld.exe!my_osmaperr()
00000001400F05AD    mysqld.exe!my_osmaperr()
00000001400F07C8    mysqld.exe!my_osmaperr()
00000001400F105C    mysqld.exe!my_osmaperr()
00000001400F4FB3    mysqld.exe!my_osmaperr()
00000001400DA97C    mysqld.exe!my_osmaperr()
00000001400C338C    mysqld.exe!my_osmaperr()
0000000076C0652D    kernel32.dll!BaseThreadInitThunk()
0000000076D3C541    ntdll.dll!RtlUserThreadStart()

InnoDB: Thread 408 stopped in file hash0hash.c line 146

http://justpaste.it/efuh

1 个答案:

答案 0 :(得分:2)

严重错误是

140217 18:51:48  InnoDB: Assertion failure in thread 2052 in file btr0cur.c line 270
InnoDB: Failing assertion: btr_page_get_next(get_block->frame, mtr) == page_get_page_no(page)

这意味着指向叶子B +树索引页面中下一页的指针指向错误的页面。每个页面在标题中都有自己的page_id。

要修复它,请使用innodb_force_recovery = 4启动MySQL并使用mysqldump转储所有表,以便从头开始重新创建InnoDB表空间。很可能mysqldump会失败一些表(因为没有一致的页面指针列表)。在这种情况下,将表转储到PK范围内或使用像this

这样的脚本

更新:数据恢复工具包已移至GitHub