“表被标记为崩溃” - 由CHECK TABLE ...修复?

时间:2015-07-07 19:13:47

标签: mysql myisam

我做了“CHECK TABLE mytable”,并且有两行Msg_text: “表被标记为崩溃” “OK”

我花了大约10分钟来审查'myisamchk'是如何工作的,然后再次运行CHECK TABLE以验证错误,但令我惊讶的是错误已经不在了。

我查看了CHECK TABLE文档并查看了句子..

“对于MyISAM表,关键统计数据也会更新。”

该表是“MyISAM”。

有可能...... - 未更新的统计数据导致“...崩溃”错误 - 并且通过CHECK TABLE更新这些统计信息解决了错误?

由于

1 个答案:

答案 0 :(得分:0)

它的工作方式是这样......

当mysqld正在运行时,它在其正在使用的任何索引(.MYI文件)中设置了一个标志。通常,索引更新会写入.MYI文件,但没有紧迫感,因为它们被缓存在“key_buffer”中。

当mysqld无法正常终止时(例如,由于电源故障),mysqld没有机会清除该标志。重新启动后,mysqld看到标志并说“哦,恐慌;这个索引可能已损坏”。然后,您必须进入并采取措施清除该标志,并在必要时使用REPAIR TABLE或具有适当参数的等效myisamchk修复损坏。

通常,索引并没有真正损坏,并且确实不需要CHECK / REPAIR。但MySQL无法确定。因此,有点惊人的消息。

可以进行设置,以便在启动期间检查和修复MyISAM表。我很少看到myisam_recover_options设置为OFF以外的任何内容。

如果你切换到InnoDB,你几乎可以忘掉所有这些东西。