2010-11-15 252 views
1

我一直有數據庫重複崩潰表的問題。幸運的是,通過修復墜毀的桌子很容易修復,但不得不注意桌子崩潰(或讓客戶告訴我)並修復它。對客戶端通過CMS訪問的數據庫進行更改後,崩潰傾向於發生。防止mysql MyISAM表崩潰

我注意到最近一次表崩潰,它引用了一個數字 - 就像找到57中的89;然後我在基數中注意到了主鍵。把2和2放在一起我搜索基數,發現優化表格在某種程度上是相關的,因此我認爲通過定期優化表格,就像更新之後一樣,這將有助於防止崩潰。這是真的還是我設法得到73而不是4?

當客戶端通過PHP進行更改時,我可以將MYSQL函數發送到數據庫,所以從這個角度來看的幫助會很好。

任何其他與表崩潰的幫助將不勝感激。

+1

InnoDB表不會崩潰(或更確切地說,它們在服務器啓動時會自動恢復)。你確定這些不是MyISAM? – Mchl 2010-11-15 13:50:12

+0

哎呦,你說得對。當我寫這個時,我正在看一個完全不同的數據庫,因此檢查了錯誤的數據庫,啞巴移動。 – andyface 2010-11-15 13:57:06

回答

0

是不是真正的OPTIMIZE TABLE會防止表崩潰

其實

ü應該不運行OPTIMIZE TABLE過於頻繁,雖然被設計爲緊湊(表被鎖定)無數據

嘗試mysqlcheck -C

mysqlcheck -c

+0

感謝有關優化的信息。我沒有提到我主要是通過PHP來運行,所以我正在尋找一個解決方案,以便在客戶端進行更改時實現自動化。 – andyface 2010-11-15 14:16:25

+0

@安迪評分:可以使用純MySQL的句法 - > http://dev.mysql.com/doc/refman/5.1/en/check-table.html – ajreal 2010-11-15 14:19:29

+0

今天看到了客戶端的服務器上:在運行OPTIMIZE' TABLE',表格崩潰......必須運行'REPAIR TABLE'才能擺脫它。當然,這是MyISAM,我鼓勵客戶使用InnoDB,正如@Mchl提出的那樣(而且正如我在自己的服務器上那樣)。 – Yvan 2014-01-06 07:55:40

0

MyISAM表通常被損壞,原因如下:

  • 在MySQL或外部問題的bug(OS崩潰,硬盤掉電,出內存不足OS殺死),導致mysqld的異常退出
  • 在MyISAM存儲引擎
  • 運行兩個A的bug在同一時間對同一數據的mysqld的情況下
  • 硬件故障

所以,你可以做,以避免腐敗的最好是有一個良好的UPS,操作系統和MySQL的運行最穩定的版本,請確保您的硬件功能正常,請確保您有足夠的金額的RAM(爲了避免殺死OOM,並且爲了避免誘惑魔鬼,通常會在內存不足的情況下觸發錯誤),併成爲一個好孩子 - 不要用信號9殺死mysqld,並且在重新啓動時確保mysqld的舊實例在開始新實例之前已經關閉。

您可能還想採取措施應對腐敗。經常備份數據,並保持表格合理,以避免冗長的恢復時間。

使用InnoDB是今天流行的另一種選擇,因爲它與學校教授的數據庫理論相一致,但它確實存在自己的問題,如果嘗試遷移,可能會引入新問題 - 數據膨脹,性能下降,死鎖,數據損壞(InnoDB風格),更復雜 - 更可能發生錯誤,更難以排除故障等。