請注意,在啟用一般查詢日誌的情況下啟動 mysqld 之前,您應該使用 myisamchk 檢查您的所有資料表。請參閱 第 7 章,MySQL 伺服器管理。
如果 mysqld 停止或掛起,您應該在啟用一般查詢日誌的情況下啟動 mysqld。請參閱 第 7.4.3 節,〈一般查詢日誌〉。當 mysqld 再次停止時,您可以檢查日誌檔的結尾,以找出導致 mysqld 停止的查詢。
如果您使用預設的一般查詢日誌檔,則該日誌會儲存在資料庫目錄中,檔名為
。在大多數情況下,導致 mysqld 停止的是日誌檔中的最後一個查詢,但如果可以,您應該重新啟動 mysqld,並從 mysql 命令列工具執行找到的查詢,藉此驗證此情況。如果此方法有效,您也應該測試所有未完成的複雜查詢。主機名稱
.log
您也可以嘗試對所有耗時較長的 SELECT
陳述式執行 EXPLAIN
命令,以確保 mysqld 正確使用索引。請參閱 第 15.8.2 節,〈EXPLAIN 陳述式〉。
您可以透過在啟用慢速查詢日誌的情況下啟動 mysqld 來找出執行時間較長的查詢。請參閱 第 7.4.5 節,〈慢速查詢日誌〉。
如果在錯誤日誌(通常是名為
的檔案)中發現文字 host_name
.errmysqld restarted
,則您可能找到了一個導致 mysqld 失敗的查詢。如果發生這種情況,您應該使用 myisamchk 檢查所有表格(請參閱 第 7 章,MySQL 伺服器管理),並測試 MySQL 日誌檔案中的查詢,以查看是否有查詢失敗。如果您找到這樣的查詢,請先嘗試升級到最新的 MySQL 版本。如果這沒有幫助,請回報錯誤,請參閱 第 1.6 節,「如何回報錯誤或問題」。
如果您啟動 mysqld 時設定了 myisam_recover_options
系統變數,MySQL 會自動檢查並嘗試修復被標記為「未正確關閉」或「崩潰」的 MyISAM
表格。如果發生這種情況,MySQL 會在 hostname.err
檔案中寫入一個條目 'Warning: Checking table ...'
,如果該表格需要修復,則後面會接著 Warning: Repairing table
。如果您收到許多這樣的錯誤,但 mysqld 並未在之前意外終止,那麼表示有問題,需要進一步調查。請參閱 第 7.1.7 節,「伺服器命令選項」。
當伺服器偵測到 MyISAM
表格損壞時,它會將額外資訊寫入錯誤日誌,例如原始程式檔案的名稱和行號,以及存取表格的執行緒清單。例如:Got an error from thread_id=1, mi_dynrec.c:368
。這些資訊在錯誤回報中很有用。
如果 mysqld 意外終止,這並不是一個好兆頭,但在這種情況下,您不應該調查 Checking table...
訊息,而應該嘗試找出 mysqld 終止的原因。