"Table is marked as crashed" - 由 CHECK TABLE 修复...?

"Table is marked as crashed" - fixed by CHECK TABLE ...?

我做了 "CHECK TABLE mytable" 并且有两行带有 Msg_text: "Table is marked as crashed" "OK"

我花了大约 10 分钟查看 'myisamchk' 的工作原理,然后再次 运行 检查 TABLE 以验证错误,但令我惊讶的是错误不再存在。

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

"For MyISAM tables, the key statistics are updated as well."

table 是 "MyISAM"。

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

谢谢

它的工作原理是这样的...

虽然 mysqld 是 运行,但它在它使用的任何索引(.MYI 文件)中都设置了一个标志。通常索引更新被写入 .MYI 文件,但没有紧迫感,因为它们被缓存在 "key_buffer".

当 mysqld 异常终止时(例如,由于电源故障),mysqld 没有机会清除标志。重新启动后,mysqld 看到标志并显示 "oh, panic; this index may be corrupted"。然后,你必须进来并采取行动清除标志,并在必要时使用 REPAIR TABLE 或具有适当参数的等效 myisamchk 修复损坏。

通常,索引并没有真正损坏,并且 CHECK/REPAIR 并不是真正需要的。但是 MySQL 不能确定。因此,有些令人担忧的消息。

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

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