2010-03-30 89 views
2

我最近創建了一個基於ajax的即時通訊應用程序,運行了一段時間後,我得到一個錯誤[表]被標記爲崩潰,應該修復。這怎麼可能發生,我怎麼去阻止它再次發生?mysql表標記爲崩潰

回答

4

大部分時間都發生在MySQL服務器正在寫入表時發生崩潰時。您應該嘗試運行CHECK TABLE <databasename>.<tablename>,它將檢查表格的內容並最終讓您知道它是否真的被破壞......然後您可能需要運行REPAIR TABLE <databasename>.<tablename>。您可能還想讀一下that page

如果表使用MyISAM引擎,那麼您最好使用MySQL發行版中的myisamchk工具(在這種情況下,我認爲您應該參考that page)。

+0

你可以給我一個mysql語句的例子來檢查,如果錯誤返回修復? – 2010-03-31 03:29:40

+0

假設標記爲崩潰的表是「MyTable」,那麼你會去'CHECK TABLE MyTable' ...然後,除非結果是「表已經是最新的」或沿着這些行的東西,否則運行REPAIR TABLE MyTable '。你應該很好走。 – Romain 2010-03-31 19:07:21

0

這不是一個答案,但一個例子,我想出了可能幫助別人:

function mysql_check_and_repair($array){ 
    if(is_array($array)) { 
     foreach($array as $table_name) { 
      $q = mysql_query("CHECK TABLE `$table_name` QUICK") or die(mysql_error()); 
      $a = mysql_fetch_array($q); 
      if($a['Msg_text'] != 'Table is already up to date' && $a['Msg_text'] != 'OK') { 
       log_error($a['Msg_text']); 
       mysql_query("REPAIR TABLE `$table_name`") or die(mysql_query());  
      } 
     } 
    }else{ 
     return false; 
    } 
} 

有沒有人對如何ofter他們認爲我應該執行這個(目前在做任何更新都被之前的任何指示對數據庫進行的,但每個請求是2秒)