2013-06-05 47 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 
相關問題