我们在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
答案 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