MySql客户端正在使用或未正确关闭表

时间:2013-06-05 08:16:40

标签: mysql

我有一个包含大约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并再次启动它以确保没有用户正在使用表/数据库?

2 个答案:

答案 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