我有一个包含大约65个表的数据库。其中一个表是一个名为order_line的大型MyISAM表。偶尔这个表是腐败的。当我使用CHECK TABLE命令时,我收到消息:
Op | Msg_type | Msg_Text check | warning | "Table is marked as crashed" check | warning | "3 clients are using or havent's closed the table properly" check | error | "Found 1149921 keys of 114948" check | error | "Corrupt"
我在网上看了很多这个,最常见的答案是“你应该修理桌子”。这对我有用,但我想知道原因是什么,以及如何重现这一点。
我有一个webapplication,每个客户有一个数据库(300+)。我们运行脚本来更新所有这些数据库。当我这样做时,我很害怕,很多这些桌子都腐败了。
我还想知道更新所有这些数据库的最佳方法。我是否必须关闭MySQL并再次启动它以确保没有用户正在使用表/数据库?
答案 0 :(得分:1)
MyISAM表被破坏的原因是该引擎实现的固有原因。它依赖于操作系统将数据库缓冲区刷新回磁盘,而不是使用Write-Ahead-Log和专用策略来刷新脏缓冲区。 MyISAM也不是交易性的。
我强烈建议使用InnoDB
引擎,它似乎更适合您的情况(表order_line
)。 MyISAM不是您用例的正确引擎。
答案 1 :(得分:1)
我个人通过mysql myDatabase
中的以下命令修复我的数据库。
CHECK TABLE myTable ;
--- ERROR
REPAIR TABLE myTable;
CHECK TABLE myTable ;
--- OK