即使MyISAM表格式非常可靠(SQL語句對表做的所有改變在語句返回之前被寫下),如果下列任何事件發生,你依然可以獲得損壞的表:
· MySQLd進程在寫中間被殺掉。
· 發生未預期的計算機關閉(例如,計算機被關閉)。
· 硬件故障。
· 你可以同時在正被服務器修改的表上使用外部程序(如myisamchk)。
· MySQL或MyISAM代碼的軟件缺陷。
一個損壞的表的典型症狀如下:
· 當在從表中選擇數據之時,你得到如下錯誤:
· Incorrect key file for table: '...'. Try to repair it
· 查詢不能在表中找到行或返回不完全的數據。
你可以用CHECK TABLE statement語句來檢查MyISAM表的健康,並用REPAIR TABLE修復一個損壞的MyISAM表。當MySQLd不運行之時,你也可以用myisamchk命令檢查或修理一個表。
如果你的表變得頻繁損壞,你應該試著確定為什麼會這樣的原因。要明白的最重要的事是表變得損壞是不是因為服務器崩潰的結果。你可以在錯誤日志中查找最近的restarted MySQLd消息來早期驗證這個。如果存在這樣一個消息,則表損壞是服務器死掉的一個結果是很有可能的。否則,損壞可能在正常操作中發生。這是一個缺陷。你應該試著創建一個展示這個問題的可重復生成的測試案例。