<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Myisamchk小工具使用手冊(cè)

    Myisamchk是MyISAM表維護(hù)的一個(gè)非常實(shí)用的工具。可以使用myisamchk實(shí)用程序來(lái)獲得有關(guān)數(shù)據(jù)庫(kù)表的信息或檢查、修復(fù)、優(yōu)化他們。myisamchk適用MyISAM表(對(duì)應(yīng).MYI和.MYD文件的表)。
    1.myisamchk的調(diào)用方法
    myisamchk [options] tbl_name ...
    其中options指定你想讓myisamchk干什么。

    它允許你通過(guò)使用模式“*.MYI”指定在一個(gè)目錄所有的表。
    shell> myisamchk *.MYI

    推薦的快速檢查所有MyISAM表的方式是:

    shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
    當(dāng)你運(yùn)行myisamchk時(shí),必須確保其它程序不使用表。

    當(dāng)你運(yùn)行myisamchk時(shí)內(nèi)存分配重要.MYIsamchk使用的內(nèi)存大小不能超過(guò)用-O選項(xiàng)指定的。對(duì)于大多數(shù)情況,使用-O sort=16M應(yīng)該足夠了。
    另外在修復(fù)時(shí)myisamchk需要大量硬盤空間,基本上是所涉及表空間的雙倍大小。


    2.myisamchk的一般選項(xiàng)
    --debug=debug_options, -# debug_options
    輸出調(diào)試記錄文件。debug_options字符串經(jīng)常是'd:t:o,filename'。

    --silent,-s
    沉默模式。僅當(dāng)發(fā)生錯(cuò)誤時(shí)寫輸出。

    --wait, -w
    如果表被鎖定,不是提示錯(cuò)誤終止,而是在繼續(xù)前等待到表被解鎖。
    如果不使用--skip-external-locking,可以隨時(shí)使用myisamchk來(lái)檢查表。當(dāng)檢查表時(shí),所有嘗試更新表的客戶端將等待,直到myisamchk準(zhǔn)備好可以繼續(xù)。
    請(qǐng)注意如果用--skip-external-locking選項(xiàng)運(yùn)行mysqld,只能用另一個(gè)myisamchk命令鎖定表。

    --var_name=value
    可以通過(guò)--var_name=value選項(xiàng)設(shè)置下面的變量:
    decode_bits 9
    ft_max_word_len 取決于版本
    ft_min_word_len 4
    ft_stopword_file 內(nèi)建列表
    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
    如果想要快速修復(fù),將key_buffer_size和sort_buffer_size變量設(shè)置到大約可用內(nèi)存的25%。
    可以將兩個(gè)變量設(shè)置為較大的值,因?yàn)橐粋€(gè)時(shí)間只使用一個(gè)變量。
    myisam_block_size是用于索引塊的內(nèi)存大小。
    stats_method影響當(dāng)給定--analyze選項(xiàng)時(shí),如何為索引統(tǒng)計(jì)搜集處理NULL值。

    3.myisamchk的檢查選項(xiàng)
    --check, -c
    檢查表的錯(cuò)誤。如果你不明確指定操作類型選項(xiàng),這就是默認(rèn)操作。

    --check-only-changed, -C
    只檢查上次檢查后有變更的表。

    --extend-check, -e
    非常仔細(xì)地檢查表。如果表有許多索引將會(huì)相當(dāng)慢。

    --fast,-F
    只檢查沒(méi)有正確關(guān)閉的表。

    --force, -f
    如果myisamchk發(fā)現(xiàn)表內(nèi)有任何錯(cuò)誤,則自動(dòng)進(jìn)行修復(fù)。

    --information, -i
    打印所檢查表的統(tǒng)計(jì)信息。

    --medium-check, -m
    比--extend-check更快速地進(jìn)行檢查。只能發(fā)現(xiàn)99.99%的錯(cuò)誤

    --update-state, -U
    將信息保存在.MYI文件中,來(lái)表示表檢查的時(shí)間以及是否表崩潰了。該選項(xiàng)用來(lái)充分利用--check-only-changed選項(xiàng),
    但如果mysqld服務(wù)器正使用表并且正用--skip-external-locking選項(xiàng)運(yùn)行時(shí)不應(yīng)使用該選項(xiàng)。

    --read-only, -T
    不要將表標(biāo)記為已經(jīng)檢查。如果你使用myisamchk來(lái)檢查正被其它應(yīng)用程序使用而沒(méi)有鎖定的表很有用

    4.myisamchk的修復(fù)選項(xiàng)
    --backup, -B
    將.MYD文件備份為file_name-time.BAK

    --character-sets-dir=path
    字符集安裝目錄。

    --correct-checksum
    糾正表的校驗(yàn)和信息。

    --data-file-length=len, -D len
    數(shù)據(jù)文件的最大長(zhǎng)度

    --extend-check,-e
    進(jìn)行修復(fù),試圖從數(shù)據(jù)文件恢復(fù)每一行。一般情況會(huì)發(fā)現(xiàn)大量的垃圾行。不要使用該選項(xiàng),除非你不顧后果。

    --force, -f
    覆蓋舊的中間文件(文件名類似tbl_name.TMD),而不是中斷

    --keys-used=val, -k val
    對(duì)于myisamchk,該選項(xiàng)值為位值,說(shuō)明要更新的索引。選項(xiàng)值的每一個(gè)二進(jìn)制位對(duì)應(yīng)表的一個(gè)索引,其中第一個(gè)索引對(duì)應(yīng)位0。
    選項(xiàng)值0禁用對(duì)所有索引的更新,可以保證快速插入。通過(guò)myisamchk -r可以重新激活被禁用的索引。

    --parallel-recover, -p
    與-r和-n的用法相同,但使用不同的線程并行創(chuàng)建所有鍵。

    --quick,-q
    不修改數(shù)據(jù)文件,快速進(jìn)行修復(fù)。

    --recover, -r
    可以修復(fù)幾乎所有一切問(wèn)題,除非唯一的鍵不唯一時(shí)(對(duì)于MyISAM表,這是非常不可能的情況)。如果你想要恢復(fù)表,
    這是首先要嘗試的選項(xiàng)。如果myisamchk報(bào)告表不能用-r恢復(fù),則只能嘗試-o。
    在不太可能的情況下-r失敗,數(shù)據(jù)文件保持完好)。

    --safe-recover, -o
    使用一個(gè)老的恢復(fù)方法讀取,按順序讀取所有行,并根據(jù)找到的行更新所有索引樹(shù)。這比-r慢些,
    但是能處理-r不能處理的情況。該恢復(fù)方法使用的硬盤空間比-r少。一般情況,你應(yīng)首先用-r維修,如果-r失敗則用-o。

    --sort-recover, -n
    強(qiáng)制myisamchk通過(guò)排序來(lái)解析鍵值,即使臨時(shí)文件將可能很大。


    5.myisamchk的其他選項(xiàng)
    myisamchk支持以下表檢查和修復(fù)之外的其它操作的選項(xiàng):

    --analyze,-a
    分析鍵值的分布。這通過(guò)讓聯(lián)結(jié)優(yōu)化器更好地選擇表應(yīng)該以什么次序聯(lián)結(jié)和應(yīng)該使用哪個(gè)鍵來(lái)改進(jìn)聯(lián)結(jié)性能。
    要想獲取分布相關(guān)信息,使用myisamchk --description --verbose tbl_name命令或SHOW KEYS FROM tbl_name語(yǔ)句。

    --sort-index, -S
    以從高到低的順序排序索引樹(shù)塊。這將優(yōu)化搜尋并且將使按鍵值的表掃描更快。

    --set-auto-increment[=value], -A[value]
    強(qiáng)制從給定值開(kāi)始的新記錄使用AUTO_INCREMENT編號(hào)(或如果已經(jīng)有AUTO_INCREMENT值大小的記錄,應(yīng)使用更高值)。
    如果未指定value,新記錄的AUTO_INCREMENT編號(hào)應(yīng)使用當(dāng)前表的最大值加上1。

    --description, -d
    打印出關(guān)于表的描述性信息。
    例如:
    [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.如何修復(fù)表

    檢查你的表
    如果你有很多時(shí)間,運(yùn)行myisamchk *.MYI或myisamchk -e *.MYI。使用-s(沉默)選項(xiàng)禁止不必要的信息。
    如果mysqld服務(wù)器處于宕機(jī)狀態(tài),應(yīng)使用--update-state選項(xiàng)來(lái)告訴myisamchk將表標(biāo)記為'檢查過(guò)的'。

    簡(jiǎn)單安全的修復(fù)
    首先,試試myisamchk -r -q tbl_name(-r -q意味著“快速恢復(fù)模式”)
    如果在修復(fù)時(shí),你得到奇怪的錯(cuò)誤(例如out of memory錯(cuò)誤),或如果myisamchk崩潰,到階段3。

    困難的修復(fù)
    只有在索引文件的第一個(gè)16K塊被破壞,或包含不正確的信息,或如果索引文件丟失,你才應(yīng)該到這個(gè)階段。在這種情況下,需要?jiǎng)?chuàng)建一個(gè)新的索引文件。按如下步驟操做:

    1. 把數(shù)據(jù)文件移到安全的地方。
    2. 使用表描述文件創(chuàng)建新的(空)數(shù)據(jù)文件和索引文件:
    3. shell> mysql db_name
    4. mysql> SET AUTOCOMMIT=1;
    5. mysql> TRUNCATE TABLE tbl_name;
    6. mysql> quit
    如果你的MySQL版本沒(méi)有TRUNCATE TABLE,則使用DELETE FROM tbl_name。
    7. 將老的數(shù)據(jù)文件拷貝到新創(chuàng)建的數(shù)據(jù)文件之中。(不要只是將老文件移回新文件之中;你要保留一個(gè)副本以防某些東西出錯(cuò)。)

    回到階段2。現(xiàn)在myisamchk -r -q應(yīng)該工作了。(這不應(yīng)該是一個(gè)無(wú)限循環(huán))。

    你還可以使用REPAIR TABLE tbl_name USE_FRM,將自動(dòng)執(zhí)行整個(gè)程序。


    非常困難的修復(fù)
    只有.frm描述文件也破壞了,你才應(yīng)該到達(dá)這個(gè)階段。這應(yīng)該從未發(fā)生過(guò),因?yàn)樵诒肀粍?chuàng)建以后,描述文件就不再改變了。

    1. 從一個(gè)備份恢復(fù)描述文件然后回到階段3。你也可以恢復(fù)索引文件然后回到階段2。對(duì)后者,你應(yīng)該用myisamchk -r啟動(dòng)。
    2. 如果你沒(méi)有進(jìn)行備份但是確切地知道表是怎樣創(chuàng)建的,在另一個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建表的一個(gè)拷貝。刪除新的數(shù)據(jù)文件,然后從其他數(shù)據(jù)庫(kù)將描述文件和索引文件移到破壞 的數(shù)據(jù)庫(kù)中。這樣提供了新的描述和索引文件,但是讓.MYD數(shù)據(jù)文件獨(dú)自留下來(lái)了。回到階段2并且嘗試重建索引文件。


    7.清理碎片
    對(duì)Innodb 表則可以通過(guò)執(zhí)行以下語(yǔ)句來(lái)整理碎片,提高索引速度:
    ALTER TABLE tbl_name ENGINE = Innodb;
    這其實(shí)是一個(gè) NULL 操作,表面上看什么也不做,實(shí)際上重新整理碎片了。

    對(duì)myisam表格,為了組合碎片記錄并且消除由于刪除或更新記錄而浪費(fèi)的空間,以恢復(fù)模式運(yùn)行myisamchk:

    shell> myisamchk -r tbl_name

    你可以用SQL的OPTIMIZE TABLE語(yǔ)句使用的相同方式來(lái)優(yōu)化表,OPTIMIZE TABLE可以修復(fù)表并對(duì)鍵值進(jìn)行分析,并且可以對(duì)索引樹(shù)進(jìn)行排序以便更快地查找鍵值。

    8.建立表檢查計(jì)劃
    運(yùn)行一個(gè)crontab,每天定期檢查所有的myisam表格。
    35 0 * * 0 /path/to/myisamchk --fast --silent /path/to/datadir/*/*.MYI

    9.獲取表的信息

    myisamchk -d tbl_name:以“描述模式”運(yùn)行myisamchk,生成表的描述
    myisamchk -d -v tbl_name: 為了生成更多關(guān)于myisamchk正在做什么的信息,加上-v告訴它以冗長(zhǎng)模式運(yùn)行。
    myisamchk -eis tbl_name:僅顯示表的最重要的信息。因?yàn)楸仨氉x取整個(gè)表,該操作很慢。
    myisamchk -eiv tbl_name:這類似 -eis,只是告訴你正在做什么。


    10.Myisamchk產(chǎn)生的信息解釋

    MyISAM file
    ISAM(索引)文件名。

    File-version
    ISAM格式的版本。當(dāng)前總是2。

    Creation time
    數(shù)據(jù)文件創(chuàng)建的時(shí)間。

    Recover time
    索引/數(shù)據(jù)文件上次被重建的時(shí)間。

    Data records
    在表中有多少記錄。

    Deleted blocks
    有多少刪除的塊仍然保留著空間。你可以優(yōu)化表以使這個(gè)空間減到最小。參見(jiàn)第7章:優(yōu)化。

    Datafile parts
    對(duì)動(dòng)態(tài)記錄格式,這指出有多少數(shù)據(jù)塊。對(duì)于一個(gè)沒(méi)有碎片的優(yōu)化過(guò)的表,這與Data records相同。

    Deleted data
    不能回收的刪除數(shù)據(jù)有多少字節(jié)。你可以優(yōu)化表以使這個(gè)空間減到最小。參見(jiàn)第7章:優(yōu)化。

    Datafile pointer
    數(shù)據(jù)文件指針的大小,以字節(jié)計(jì)。它通常是2、3、4或5個(gè)字節(jié)。大多數(shù)表用2個(gè)字節(jié)管理,但是目前這還不能從MySQL控制。
    對(duì)固定表,這是一個(gè)記錄地址。對(duì)動(dòng)態(tài)表,這是一個(gè)字節(jié)地址。

    Keyfile pointer
    索引文件指針的大小,以字節(jié)計(jì)。它通常是1、2或3個(gè)字節(jié)。大多數(shù)表用 2 個(gè)字節(jié)管理,但是它自動(dòng)由MySQL計(jì)算。
    它總是一個(gè)塊地址。

    Max datafile length
    表的數(shù)據(jù)文件(.MYD文件)能夠有多長(zhǎng),以字節(jié)計(jì)。

    Max keyfile length
    表的鍵值文件(.MYI文件)能夠有多長(zhǎng),以字節(jié)計(jì)。

    Recordlength
    每個(gè)記錄占多少空間,以字節(jié)計(jì)。

    Record format
    用于存儲(chǔ)表行的格式。上面的例子使用Fixed length。其他可能的值是Compressed和Packed。

    table description
    在表中所有鍵值的列表。對(duì)每個(gè)鍵,給出一些底層的信息:
    Key
    該鍵的編號(hào)。
    Start
    該索引部分從記錄的哪里開(kāi)始。
    Len
    該索引部分是多長(zhǎng)。對(duì)于緊湊的數(shù)字,這應(yīng)該總是列的全長(zhǎng)。對(duì)字符串,它可以比索引的列的全長(zhǎng)短些,
    因?yàn)槟憧赡軙?huì)索引到字符串列的前綴。
    Index
    unique或multip(multiple)。表明一個(gè)值是否能在該索引中存在多次。
    Type
    該索引部分有什么數(shù)據(jù)類型。這是一個(gè)packed、stripped或empty選項(xiàng)的ISAM數(shù)據(jù)類型。
    Root
    根索引塊的地址。
    Blocksize
    每個(gè)索引塊的大小。默認(rèn)是1024,但是從源碼構(gòu)建MySQL時(shí),該值可以在編譯時(shí)改變。
    Rec/key
    這是由優(yōu)化器使用的統(tǒng)計(jì)值。它告訴對(duì)該鍵的每個(gè)值有多少條記錄。唯一鍵總是有一個(gè)1值。
    在一個(gè)表被裝載后(或變更很大),可以用myisamchk -a更新。如果根本沒(méi)被更新,給定一個(gè)30的默認(rèn)值。
    在上面例子的表中,第9個(gè)鍵有兩個(gè)table description行。這說(shuō)明它是有2個(gè)部分的多部鍵。

    Keyblocks used
    鍵塊使用的百分比是什么。當(dāng)在例子中使用的表剛剛用myisamchk重新組織時(shí),該值非常高(很接近理論上的最大值)。

    Packed
    MySQL試圖用一個(gè)通用后綴壓縮鍵。這只能被用于CHAR/VARCHAR/DECIMAL列的鍵。對(duì)于左部分類似的長(zhǎng)字符串,
    能顯著地減少使用空間。在上面的第3個(gè)例子中,第4個(gè)鍵是10個(gè)字符長(zhǎng),可以減少60%的空間。

    Max levels
    對(duì)于該鍵的B樹(shù)有多深。有長(zhǎng)鍵的大表有較高的值。

    Records
    表中有多少行。

    M.recordlength
    平均記錄長(zhǎng)度。對(duì)于有定長(zhǎng)記錄的表,這是準(zhǔn)確的記錄長(zhǎng)度,因?yàn)樗杏涗浀拈L(zhǎng)度相同。

    Packed
    MySQL從字符串的結(jié)尾去掉空格。Packed值表明這樣做達(dá)到的節(jié)約的百分比。

    Recordspace used
    數(shù)據(jù)文件被使用的百分比。

    Empty space
    數(shù)據(jù)文件未被使用的百分比。

    Blocks/Record
    每個(gè)記錄的平均塊數(shù)(即,一個(gè)碎片記錄由多少個(gè)連接組成)。對(duì)固定格式表,這總是1。該值應(yīng)該盡可能保持接近1.0。
    如果它變得太大,你可以重新組織表。參見(jiàn)第7章:優(yōu)化。

    Recordblocks
    多少塊(鏈接)被使用。對(duì)固定格式,它與記錄的個(gè)數(shù)相同。

    Deleteblocks
    多少塊(鏈接)被刪除。

    Recorddata
    在數(shù)據(jù)文件中使用了多少字節(jié)。

    Deleted data
    在數(shù)據(jù)文件中多少字節(jié)被刪除(未使用)。

    Lost space
    如果一個(gè)記錄被更新為更短的長(zhǎng)度,就損失了一些空間。這是所有這樣的損失之和,以字節(jié)計(jì)。

    Linkdata
    當(dāng)使用動(dòng)態(tài)表格式,記錄碎片用指針連接(每個(gè)4 ~ 7字節(jié))。 Linkdata指這樣的指針使用的內(nèi)存量之和。

    posted on 2008-04-13 02:08 金家寶 閱讀(1056) 評(píng)論(0)  編輯  收藏 所屬分類: Mysql

    主站蜘蛛池模板: 久久青草亚洲AV无码麻豆| 91在线视频免费91| 亚洲精品成人网久久久久久| 日本一区午夜艳熟免费| 亚洲男人的天堂在线| 日本不卡在线观看免费v| 在线观看免费视频网站色| 亚洲AV成人精品日韩一区18p| 亚洲综合色婷婷在线观看| AV无码免费永久在线观看| 老司机午夜精品视频在线观看免费| 亚洲精品高清无码视频| 91免费精品国自产拍在线不卡| 一区二区三区视频免费| 亚洲中文无码a∨在线观看| JLZZJLZZ亚洲乱熟无码| 一个人免费观看视频www| 亚洲精品视频免费观看| 亚洲AV无码一区东京热久久| 大学生a级毛片免费观看| 久久亚洲精品无码av| 亚洲视频在线观看一区| 黄色网址免费观看| 国产久爱免费精品视频| 伊人久久亚洲综合影院首页| 久久精品国产精品亚洲艾草网| 国产免费爽爽视频免费可以看| 1000部啪啪毛片免费看| 亚洲永久在线观看| 亚洲乱亚洲乱淫久久| 亚洲性日韩精品一区二区三区| 好吊妞998视频免费观看在线| 亚洲精品免费观看| 亚洲午夜无码久久久久小说| 亚洲高清在线观看| 日韩毛片免费无码无毒视频观看| 久久九九全国免费| 亚洲乱码无人区卡1卡2卡3| 美腿丝袜亚洲综合| 999在线视频精品免费播放观看| 免费在线观影网站|