文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  使用 myisamchk 進行損毀復原

9.6.1 使用 myisamchk 進行損毀復原

本節說明如何檢查和處理 MySQL 資料庫中的資料損毀。如果您的表格經常損毀,您應該嘗試找出原因。請參閱第 B.3.3.3 節,「如果 MySQL 持續損毀該怎麼辦」

如需瞭解 MyISAM 表格如何損毀的說明,請參閱第 18.2.4 節,「MyISAM 表格問題」

如果您在停用外部鎖定的情況下執行 mysqld (這是預設值),則當 mysqld 使用相同表格時,您無法可靠地使用 myisamchk 來檢查表格。如果您可以確定在使用 myisamchk 時,沒有人可以使用 mysqld 來存取表格,您只需要在開始檢查表格之前執行 mysqladmin flush-tables 即可。如果您無法保證這一點,您必須在檢查表格時停止 mysqld。如果您執行 myisamchk 來檢查 mysqld 同時正在更新的表格,您可能會收到表格損毀的警告,即使它實際上並未損毀。

如果伺服器在啟用外部鎖定的情況下執行,您可以隨時使用 myisamchk 來檢查表格。在這種情況下,如果伺服器嘗試更新 myisamchk 正在使用的表格,則伺服器會等待 myisamchk 完成,然後才會繼續。

如果您使用 myisamchk 來修復或最佳化表格,您必須 始終確保 mysqld 伺服器未使用該表格 (這也適用於停用外部鎖定的情況)。如果您不停止 mysqld,您至少應該在執行 myisamchk 之前執行 mysqladmin flush-tables。如果伺服器和 myisamchk 同時存取表格,您的表格可能會損毀

執行損毀復原時,請務必了解資料庫中的每個 MyISAM 表格 tbl_name 都對應到資料庫目錄中的三個檔案,如下表所示。

檔案 用途
tbl_name.MYD 資料檔案
tbl_name.MYI 索引檔案

這三種檔案類型中的每一種都可能以各種方式損毀,但問題最常發生在資料檔案和索引檔案中。

myisamchk 的運作方式是逐列建立 .MYD 資料檔案的複本。它會移除舊的 .MYD 檔案,並將新檔案重新命名為原始檔案名稱,以結束修復階段。如果您使用 --quickmyisamchk 不會建立暫時性的 .MYD 檔案,而是假設 .MYD 檔案正確,並且只產生新的索引檔案,而不觸及 .MYD 檔案。這是安全的,因為 myisamchk 會自動偵測 .MYD 檔案是否損毀,如果損毀,則會中止修復。您也可以指定 --quick 選項兩次來執行 myisamchk。在這種情況下,myisamchk 不會因為某些錯誤 (例如重複鍵錯誤) 而中止,而是會嘗試透過修改 .MYD 檔案來解決這些錯誤。通常,只有在可用磁碟空間太少而無法執行正常修復時,才使用兩個 --quick 選項才有用。在這種情況下,您至少應該在執行 myisamchk 之前備份表格。