MySql 崩溃:表的密钥文件不正确

MySql 崩溃:表的密钥文件不正确

我们有一个在 Linux 上运行 InnoDB 的 MySql 5.5 数据库。一个表(名为 table_search)正在运行 MyISAM,以便能够执行全文搜索。该表有 823 368 行。

昨天我们的服务器崩溃了,为了让它恢复,我们将原始数据移到了新服务器上,现在我们正在新服务器上运行。

一开始一切正常,但一个小时后,我们在错误日志中收到如下信息:

1. Duplicate entry 'X-Y-Z' for key index_titles (where index_titles is an index in table_search)

2. After this there where lots of errors: Incorrect key file for table './database/table_search.MYI'; try to repair it

3. After this there where lots of errors: Table './database/table_search' is marked as crashed and should be repaired

我们尝试使用以下方法修复它:

myisamchk table_search.MYI

我们得到了这样的错误:

myisamchk: error: Keypointers and record positions doesn't match
MyISAM-table 'table_search.MYI' is corrupted

然后我们尝试:

myisamchk -r -o table_search.MYI

现在一切都恢复正常,直到一小时前再次发生同样的事情。所以我们再次使用 myisamchk,它又恢复正常了。

但感觉不太稳定,因为又发生了。我们能做些什么来确保它不会再次发生?它为什么会损坏?解决方案是什么?

答案1

解决方案是其他的。我们使用以下命令重新启动了服务器:

ft_min_word_len=3

(抱歉在问题中没有提到这一点)

通过 MySql 上的此文档我们了解到:

如果您使用 myisamchk 执行修改表索引的操作(例如修复或分析),则除非您另行指定,否则将使用最小和最大字长以及停用词文件的默认全文参数值重建 FULLTEXT 索引。这可能会导致查询失败。

解决方案如下:

shell> myisamchk --recover --ft_min_word_len=3 table_search.MYI

现在服务器已经正常运行近24小时了。

答案2

这听起来好像您的表已损坏并且超出了 myisamchk 的恢复能力。

我想您最好的尝试是从备份中恢复表,或者,如果只有您的搜索索引受到影响,则重新创建并重新填充该表。

相关内容