我做了“CHECK TABLE mytable”,并且有两行Msg_text: “表被标记为崩溃” “OK”
我花了大约10分钟来审查'myisamchk'是如何工作的,然后再次运行CHECK TABLE以验证错误,但令我惊讶的是错误已经不在了。
我查看了CHECK TABLE文档并查看了句子..
“对于MyISAM表,关键统计数据也会更新。”
该表是“MyISAM”。
有可能...... - 未更新的统计数据导致“...崩溃”错误 - 并且通过CHECK TABLE更新这些统计信息解决了错误?
由于
答案 0 :(得分:0)
它的工作方式是这样......
当mysqld正在运行时,它在其正在使用的任何索引(.MYI文件)中设置了一个标志。通常,索引更新会写入.MYI文件,但没有紧迫感,因为它们被缓存在“key_buffer”中。
当mysqld无法正常终止时(例如,由于电源故障),mysqld没有机会清除该标志。重新启动后,mysqld看到标志并说“哦,恐慌;这个索引可能已损坏”。然后,您必须进入并采取措施清除该标志,并在必要时使用REPAIR TABLE
或具有适当参数的等效myisamchk修复损坏。
通常,索引并没有真正损坏,并且确实不需要CHECK / REPAIR。但MySQL无法确定。因此,有点惊人的消息。
可以进行设置,以便在启动期间检查和修复MyISAM表。我很少看到myisam_recover_options
设置为OFF
以外的任何内容。
如果你切换到InnoDB,你几乎可以忘掉所有这些东西。