1

我有一个包含大约 65 个表的数据库。其中一个表是一个名为 order_line 的大型 MyISAM 表。时不时地这个表是损坏的。当我使用 CHECK TABLE 命令时,我收到以下消息:

操作 | 消息类型 | 消息文本
检查 | 警告 | “表被标记为崩溃”
检查 | 警告 | “3 个客户正在使用或没有正确关闭表”
检查 | 错误 | “找到 114948 的 1149921 个键”
检查 | 错误 | “腐败”

我在互联网上读了很多这个,最常见的答案是“你应该修理桌子”。这对我有用,但我想知道发生这种情况的原因是什么,以及如何重现这种情况。

我有一个网络应用程序,我们每个客户(300 多个)都有一个数据库。我们运行脚本来更新所有这些数据库。当我这样做时,我很害怕,很多这些表都会损坏。

我还想知道更新所有这些数据库的最佳方法是什么。我是否必须关闭 MySQL 并重新启动它以确保没有用户正在使用表/数据库?

4

2 回答 2

2

我个人通过以下命令修复我的数据库mysql myDatabase

CHECK TABLE myTable ; 
--- ERROR
REPAIR TABLE myTable;
CHECK TABLE myTable ; 
--- OK
于 2016-06-10T09:32:54.710 回答
1

MyISAM 表损坏的原因是该引擎的实现所固有的。它依赖于操作系统将数据库缓冲区刷新回磁盘,而不是使用 Write-Ahead-Log 和专用策略来刷新脏缓冲区。MyISAM 也不是事务性的。

我强烈建议使用InnoDB似乎更适合您的情况的引擎(表order_line)。MyISAM 只是不适合您的用例的引擎。

于 2013-06-05T08:24:04.117 回答