文件首頁
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 — MyISAM 資料表維護工具

6.6.4 myisamchk — MyISAM 資料表維護工具

myisamchk 公用程式可取得關於您的資料庫資料表的資訊,或檢查、修復或最佳化它們。myisamchk 適用於 MyISAM 資料表 (具有用於儲存資料和索引的 .MYD.MYI 檔案的資料表)。

您也可以使用 CHECK TABLEREPAIR TABLE 語句來檢查和修復 MyISAM 資料表。請參閱 第 15.7.3.2 節,「CHECK TABLE 語句」第 15.7.3.5 節,「REPAIR TABLE 語句」

不支援將 myisamchk 與分割資料表搭配使用。

注意

最好在執行資料表修復操作之前備份資料表;在某些情況下,操作可能會導致資料遺失。可能的原因包括但不限於檔案系統錯誤。

像這樣叫用 myisamchk

myisamchk [options] tbl_name ...

options 指定您希望 myisamchk 執行的動作。它們在以下各節中說明。您也可以透過叫用 myisamchk --help 來取得選項清單。

在沒有選項的情況下,myisamchk 只會檢查您的資料表作為預設操作。若要取得更多資訊或告知 myisamchk 採取更正動作,請指定選項,如以下討論所述。

tbl_name 是您想要檢查或修復的資料庫資料表。如果您在資料庫目錄以外的其他位置執行 myisamchk,則必須指定資料庫目錄的路徑,因為 myisamchk 不知道資料庫位於何處。事實上,myisamchk 實際上並不關心您正在處理的檔案是否位於資料庫目錄中。您可以將對應於資料庫資料表的檔案複製到其他位置,並在那裡執行復原操作。

您可以根據需要,在 myisamchk 命令列上命名多個資料表。您也可以透過命名其索引檔案 (具有 .MYI 字尾的檔案) 來指定資料表。這可讓您使用模式 *.MYI 指定目錄中的所有資料表。例如,如果您在資料庫目錄中,您可以像這樣檢查該目錄中的所有 MyISAM 資料表

myisamchk *.MYI

如果您不在資料庫目錄中,您可以透過指定目錄的路徑來檢查那裡的所有資料表

myisamchk /path/to/database_dir/*.MYI

您甚至可以透過指定具有 MySQL 資料目錄路徑的萬用字元來檢查所有資料庫中的所有資料表

myisamchk /path/to/datadir/*/*.MYI

快速檢查所有 MyISAM 資料表的建議方法是

myisamchk --silent --fast /path/to/datadir/*/*.MYI

如果您想要檢查所有 MyISAM 資料表,並修復任何損壞的資料表,您可以使用下列命令

myisamchk --silent --force --fast --update-state \
          --key_buffer_size=64M --myisam_sort_buffer_size=64M \
          --read_buffer_size=1M --write_buffer_size=1M \
          /path/to/datadir/*/*.MYI

此命令假設您有超過 64MB 的可用空間。如需有關 myisamchk 的記憶體配置的更多資訊,請參閱 第 6.6.4.6 節,「myisamchk 記憶體使用量」

如需有關使用 myisamchk 的其他資訊,請參閱 第 9.6 節,「MyISAM 資料表維護和損毀復原」

重要

您必須確保在您執行 myisamchk 時沒有其他程式正在使用資料表。執行此動作最有效的方法是在執行 myisamchk 時關閉 MySQL 伺服器,或鎖定 myisamchk 正在使用的所有資料表。

否則,當您執行 myisamchk 時,它可能會顯示下列錯誤訊息

warning: clients are using or haven't closed the table properly

這表示您正在嘗試檢查一個已被另一個程式 (例如 mysqld 伺服器) 更新的資料表,該程式尚未關閉檔案,或者在未正確關閉檔案的情況下已終止,這有時可能會導致一個或多個 MyISAM 資料表損壞。

如果 mysqld 正在執行,您必須強制它使用 FLUSH TABLES 來刷新記憶體中仍在緩衝的任何資料表修改。然後,您應該確保在執行 myisamchk 時,沒有人正在使用這些資料表。

然而,避免此問題最簡單的方法是使用 CHECK TABLE 而不是 myisamchk 來檢查資料表。請參閱 第 15.7.3.2 節,「CHECK TABLE 陳述式」

myisamchk 支援下列選項,這些選項可以在命令列或選項檔案的 [myisamchk] 群組中指定。有關 MySQL 程式使用的選項檔案資訊,請參閱 第 6.2.2.2 節,「使用選項檔案」

表 6.17 myisamchk 選項

選項名稱 描述
--analyze 分析索引鍵值的分布
--backup 將 .MYD 檔案備份為 file_name-time.BAK
--block-search 尋找指定偏移量處的區塊所屬的記錄
--character-sets-dir 字元集所在的目錄
--check 檢查資料表是否有錯誤
--check-only-changed 僅檢查自上次檢查以來已變更的資料表
--correct-checksum 更正資料表的檢查碼資訊
--data-file-length 資料檔案的最大長度(當重新建立已滿的資料檔案時)
--debug 寫入偵錯日誌
--decode_bits Decode_bits
--defaults-extra-file 除了通常的選項檔案之外,還讀取指定的選項檔案
--defaults-file 僅讀取指定的選項檔案
--defaults-group-suffix 選項群組後綴值
--description 列印有關資料表的一些描述性資訊
--extend-check 進行非常徹底的資料表檢查或修復,嘗試從資料檔案中復原每個可能的列
--fast 僅檢查未正確關閉的資料表
--force 如果 myisamchk 在資料表中發現任何錯誤,自動執行修復操作
--force 覆寫舊的暫存檔。與 -r 或 -o 選項一起使用
--ft_max_word_len FULLTEXT 索引的最大字詞長度
--ft_min_word_len FULLTEXT 索引的最小字詞長度
--ft_stopword_file 使用此檔案中的停用字,而不是內建清單
--HELP 顯示說明訊息並結束
--help 顯示說明訊息並結束
--information 列印有關已檢查資料表的資訊統計資料
--key_buffer_size 用於 MyISAM 資料表索引區塊的緩衝區大小
--keys-used 一個位元值,指示要更新哪些索引
--max-record-length 如果 myisamchk 無法分配記憶體來容納,則跳過大於指定長度的列
--medium-check 執行比 --extend-check 操作更快的檢查
--myisam_block_size 用於 MyISAM 索引頁面的區塊大小
--myisam_sort_buffer_size 在進行 REPAIR 時或使用 CREATE INDEX 或 ALTER TABLE 建立索引時,對索引進行排序時分配的緩衝區
--no-defaults 不讀取任何選項檔案
--parallel-recover 使用與 -r 和 -n 相同的技術,但使用不同的執行緒並行建立所有索引鍵(beta)
--print-defaults 列印預設選項
--quick 透過不修改資料檔案來實現更快的修復
--read_buffer_size 執行循序掃描的每個執行緒都會為其掃描的每個資料表分配此大小的緩衝區
--read-only 不要將資料表標記為已檢查
--recover 執行修復,可以修正幾乎任何問題,除了不是唯一的唯一鍵
--safe-recover 使用舊的復原方法進行修復,該方法依序讀取所有列,並根據找到的列更新所有索引樹
--set-auto-increment 強制新記錄的 AUTO_INCREMENT 編號從指定的值開始
--set-collation 指定用於排序資料表索引的定序
--silent 靜音模式
--sort_buffer_size 在進行 REPAIR 時或使用 CREATE INDEX 或 ALTER TABLE 建立索引時,對索引進行排序時分配的緩衝區
--sort-index 以高到低的順序排序索引樹區塊
--sort_key_blocks sort_key_blocks
--sort-records 根據特定索引排序記錄
--sort-recover 強制 myisamchk 使用排序來解析索引鍵,即使暫存檔非常大
--stats_method 指定 MyISAM 索引統計資料收集程式碼應如何處理 NULL 值
--tmpdir 用於儲存暫存檔的目錄
--unpack 解壓縮使用 myisampack 打包的資料表
--update-state 在 .MYI 檔案中儲存資訊,以指示何時檢查資料表以及資料表是否損毀
--verbose 詳細模式
--version 顯示版本資訊並結束
--wait 等待鎖定的資料表解除鎖定,而不是終止
--write_buffer_size 寫入緩衝區大小