1.myisamchk的調用方法
myisamchk [options] tbl_name ...
其中options指定你想讓myisamchk幹什麼。
它允許你通過使用模式“*.MYI”指定在一個目錄所有的表。
shell> myisamchk *.MYI
推薦的快速檢查所有MyISAM表的方式是:
shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
當你運行myisamchk時,必須確保其它程式不使用表。
當你運行myisamchk時記憶體配置重要.MYIsamchk使用的記憶體大小不能超過用-O選項指定的。對於大多數情況,使用-O sort=16M應該足夠了。
另外在修複時myisamchk需要大量硬碟空間,基本上是所涉及資料表空間的雙倍大小。
2.myisamchk的一般選項
--debug=debug_options, -# debug_options
輸出調試記錄檔案。debug_options字串經常是'd:t:o,filename'。
--silent,-s
沉默模式。僅當發生錯誤時寫輸出。
--wait, -w
如果表被鎖定,不是提示錯誤終止,而是在繼續前等待到表被解鎖。
如果不使用--skip-external-locking,可以隨時使用myisamchk來檢查表。當檢查表時,所有嘗試更新表的用戶端將等待,直到myisamchk準備好可以繼續。
請注意如果用--skip-external-locking選項運行mysqld,只能用另一個myisamchk命令鎖定表。
--var_name=value
可以通過--var_name=value選項設定下面的變數:
decode_bits 9
ft_max_word_len 取決於版本
ft_min_word_len 4
ft_stopword_file 內建列表
key_buffer_size 523264
myisam_block_size 1024
read_buffer_size 262136
sort_buffer_size 2097144
sort_key_blocks 16
stats_method nulls_unequal
write_buffer_size 262136
如果想要快速修複,將key_buffer_size和sort_buffer_size變數設定到大約可用記憶體的25%。
可以將兩個變數設定為較大的值,因為一個時間只使用一個變數。
myisam_block_size是用於索引塊的記憶體大小。
stats_method影響當給定--analyze選項時,如何為索引統計搜集處理NULL值。
3.myisamchk的檢查選項
--check, -c
檢查表的錯誤。如果你不明確指定操作類型選項,這就是預設操作。
--check-only-changed, -C
只檢查上次檢查後有變更的表。
--extend-check, -e
非常仔細地檢查表。如果表有許多索引將會相當慢。
--fast,-F
只檢查沒有正確關閉的表。
--force, -f
如果myisamchk發現表內有任何錯誤,則自動進行修複。
--information, -i
列印所檢查表的統計資訊。
--medium-check, -m
比--extend-check更快速地進行檢查。只能發現99.99%的錯誤
--update-state, -U
將資訊儲存在.MYI檔案中,來表示表檢查的時間以及是否表崩潰了。該選項用來充分利用--check-only-changed選項,
但如果mysqld伺服器正使用表並且正用--skip-external-locking選項運行時不應使用該選項。
--read-only, -T
不要將表標記為已經檢查。如果你使用myisamchk來檢查正被其它應用程式使用而沒有鎖定的表很有用
4.myisamchk的修複選項
--backup, -B
將.MYD檔案備份為file_name-time.BAK
--character-sets-dir=path
字元集安裝目錄。
--correct-checksum
糾正表的校正和資訊。
--data-file-length=len, -D len
資料檔案的最大長度
--extend-check,-e
進行修複,試圖從資料檔案恢複每一行。一般情況會發現大量的垃圾行。不要使用該選項,除非你不顧後果。
--force, -f
覆蓋舊的中間檔案(檔案名稱類似tbl_name.TMD),而不是中斷
--keys-used=val, -k val
對於myisamchk,該選項值為位值,說明要更新的索引。選項值的每一個二進位位對應表的一個索引,其中第一個索引對應位0。
選項值0禁用對所有索引的更新,可以保證快速插入。通過myisamchk -r可以重新啟用被停用的索引。
--parallel-recover, -p
與-r和-n的用法相同,但使用不同的線程並行建立所有鍵。
--quick,-q
不修改資料檔案,快速進行修複。
--recover, -r
可以修複幾乎所有一切問題,除非唯一的鍵不唯一時(對於MyISAM表,這是非常不可能的情況)。如果你想要恢複表,
這是首先要嘗試的選項。如果myisamchk報告表不能用-r恢複,則只能嘗試-o。
在不太可能的情況下-r失敗,資料檔案保持完好)。
--safe-recover, -o
使用一個老的恢複方法讀取,按順序讀取所有行,並根據找到的行更新所有索引樹。這比-r慢些,
但是能處理-r不能處理的情況。該恢複方法使用的硬碟空間比-r少。一般情況,你應首先用-r維修,如果-r失敗則用-o。
--sort-recover, -n
強制myisamchk通過排序來解析索引值,即使臨時檔案將可能很大。
5.myisamchk的其他選項
myisamchk支援以下表檢查和修複之外的其它操作的選項:
--analyze,-a
分析索引值的分布。這通過讓連接最佳化器更好地選擇表應該以什麼次序連接和應該使用哪個鍵來改進連接效能。
要想擷取分布相關資訊,使用myisamchk --description --verbose tbl_name命令或SHOW KEYS FROM tbl_name語句。
--sort-index, -S
以從高到低的順序排序索引樹塊。這將最佳化搜尋並且將使按索引值的表掃描更快。
--set-auto-increment[=value], -A[value]
強制從給定值開始的新記錄使用AUTO_INCREMENT編號(或如果已經有AUTO_INCREMENT值大小的記錄,應使用更高值)。
如果未指定value,新記錄的AUTO_INCREMENT編號應使用當前表的最大值加上1。
--description, -d
列印出關於表的描述性資訊。
例如:
[root@qa-sandbox-1 mysql]# myisamchk -d user.MYI
MyISAM file: user.MYI
Record format: Packed
Character set: latin1_swedish_ci (8)
Data records: 6 Deleted blocks: 1
Recordlength: 346
table description:
Key Start Len Index Type
1 1 180 unique char packed stripped
181 48 char stripped
6.如何修複表
檢查你的表
如果你有很多時間,運行myisamchk *.MYI或myisamchk -e *.MYI。使用-s(沉默)選項禁止不必要的資訊。
如果mysqld伺服器處於宕機狀態,應使用--update-state選項來告訴myisamchk將表標記為'檢查過的'。
簡單安全的修複
首先,試試myisamchk -r -q tbl_name(-r -q意味著“快速復原模式”)
如果在修複時,你得到奇怪的錯誤(例如out of memory錯誤),或如果myisamchk崩潰,到階段3。
困難的修複
只有在索引檔案的第一個16K塊被破壞,或包含不正確的資訊,或如果索引檔案丟失,你才應該到這個階段。在這種情況下,需要建立一個新的索引檔案。按如下步驟操做:
1. 把資料檔案移到安全的地方。
2. 使用表描述檔案建立新的(空)資料檔案和索引檔案:
3. shell> mysql db_name
4. mysql> SET AUTOCOMMIT=1;
5. mysql> TRUNCATE TABLE tbl_name;
6. mysql> quit
如果你的MySQL版本沒有TRUNCATE TABLE,則使用DELETE FROM tbl_name。
7. 將老的資料檔案拷貝到新建立的資料檔案之中。(不要只是將老檔案移回新檔案之中;你要保留一個副本以防某些東西出錯。)
回到階段2。現在myisamchk -r -q應該工作了。(這不應該是一個無限迴圈)。
你還可以使用REPAIR TABLE tbl_name USE_FRM,將自動執行整個程式。
非常困難的修複
只有.frm描述檔案也破壞了,你才應該到達這個階段。這應該從未發生過,因為在表被建立以後,描述檔案就不再改變了。
1. 從一個備份恢複描述檔案然後回到階段3。你也可以恢複索引檔案然後回到階段2。對後者,你應該用myisamchk -r啟動。
2. 如果你沒有進行備份但是確切地知道表是怎樣建立的,在另一個資料庫中建立表的一個拷貝。刪除新的資料檔案,然後從其他資料庫將描述檔案和索引檔案移到破壞的資料庫中。這樣提供了新的描述和索引檔案,但是讓.MYD資料檔案獨自留下來了。回到階段2並且嘗試重建索引檔案。