2013-06-05 88 views
0

我有一个约65表的数据库。其中一个表是一个名为order_line的大型MyISAM表。此时此表已损坏。当我使用CHECK TABLE命令我得到消息:MySql客户端正在使用或没有正确关闭表

 
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" 

我读了很多这在互联网上最常见的回答是“你应该修复表”。这对我很有用,但我想知道这是什么原因,以及如何重现这一点。

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

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

回答

1

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

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

+0

可能不建议使用这样或那样的数据库,但这不会消除数据库的损坏... –

0

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

CHECK TABLE myTable ; 
--- ERROR 
REPAIR TABLE myTable; 
CHECK TABLE myTable ; 
--- OK 
相关问题