執行個體
| 代碼如下 |
複製代碼 |
#locate myisamchk #ln -s /usr/local/mysql/bin/myisamchk /usr/bin/myisamchk #myisamchk tablename.MYI #myisamchk -r -q tablename |
如果-r不行就採用強制執行命令如下
| 代碼如下 |
複製代碼 |
#myisamchk -r -o -f |
好了根據上面我們來分享一個執行個體
MyISAM是MySQL的預設storage engine. MyISAM table很容易爛掉(corrupted)。
此文章將教你如何檢查/修?駝廡├玫艫?yISAM tables.
每次你在MySQL DB ?造一個 table,將會在檔案系統上同時?造出*.frm、*.MYD,跟*.MYI等三種格式的檔案。
*.frm = 用來儲存資料表格式(file to store table format)
*.MYD(MyData) = 用來儲存資料(file to store data)
*.MYI(MyIndex) =用來儲存索引(file to store index)
如何檢查DB?哪個table 需要修?停?/p>
用root 執行以下指令,假設要檢查DB1下的各個table
| 代碼如下 |
複製代碼 |
#myisamchk /var/lib/mysql/DB1/*.MYI >> /tmp/myisamchk.log |
螢幕輸出中,如果發現以下字樣,該資料表就應修??/p>
| 代碼如下 |
複製代碼 |
myisamchk: error: Keypointers and record positions doesn't match MyISAM-table '/var/lib/mysql/DB1/news_post_comment.MYI' is corrupted Fix it using switch "-r" or "-o" myisamchk: warning: 1 client is using or hasn't closed the table properly MyISAM-table '/var/lib/mysql/DB1/news_post.MYI' is usable but should be fixed myisamchk: warning: 1 client is using or hasn't closed the table properly MyISAM-table '/var/lib/mysql/DB1/news_post_push_log.MYI' is usable but should be fixed |
Redirect出來的檔案中會顯示更多資訊。如下
| 代碼如下 |
複製代碼 |
Checking MyISAM file: /var/lib/mysql/DB1/yam_bbauth.MYI Data records: 14 Deleted blocks: 0 - check file-size - check record delete-chain - check key delete-chain - check index reference - check data record references index: 1 - check record links |
如何利用myisamchk修?屠玫艫?ables:
找出爛掉的table之後,用以下指令修?停?/p>
| 代碼如下 |
複製代碼 |
#myisamchk –r /var/lib/mysql/DB1/news_post_comment.MYI - recovering (with sort) MyISAM-table '/var/lib/mysql/DB1/news_post_comment.MYI Data records: 1 - Fixing index 1 |
如果table正被某個application使用,你可能會看到: clients are using or haven't closed the table properly。
所以建議修?頹敖?ysqld關掉或用FLUSH TABLES鎖住TABLES,防止修?褪庇?pplication對DB TABLE做更動。
如何讓檢查跟修?屯?苯?校?/p>
| 代碼如下 |
複製代碼 |
#myisamchk --silent --force --fast --update-state /var/lib/mysql/DB1/*.MYI myisamchk: MyISAM file /var/lib/mysql/DB1/groups.MYI myisamchk: warning: 1 client is using or hasn't closed the table properly myisamchk: MyISAM file /var/lib/mysql/DB1/profiles.MYI myisamchk: warning: 1 client is using or hasn't closed the table properly |
options 的意義如下:
? s, –silent option: Prints only errors. You can use two -s to make myisamchk very silent.
? -f, –force option: Restart myisamchk automatically with repair option -r, if there are any errors in the table.
? -F, –fast option: Check only tables that haven't been closed properly.
? -U –update-state option: Marks tables as crashed, when it finds any error.
修?褪筆侄?峙浼且涮甯?喲蟮?B
龐大的table,修?托枰?艸さ氖奔洹P?褪笨梢允侄?黽蛹且涮宀問??/p>
| 代碼如下 |
複製代碼 |
# myisamchk --silent --force --fast --update-state --key_buffer_size=512M --sort_buffer_size=512M --read_buffer_size=4M --write_buffer_size=4M /var/lib/mysql/DB1/*.MYI
|
用myisamchk 擷取table資訊
| 代碼如下 |
複製代碼 |
#myisamchk -dvv profiles.MYI MyISAM file: profiles.MYI Record format: Packed Character set: latin1_swedish_ci (8) File-version: 1 Creation time: 2007-08-16 18:46:59 Status: open,changed,analyzed,optimized keys,sorted index pages Auto increment key: 1 Last value: 88 Data records: 88 Deleted blocks: 0 Datafile parts: 118 Deleted data: 0 Datafile pointer (bytes): 4 Keyfile pointer (bytes): 4 Datafile length: 6292 Keyfile length: 6144 Max datafile length: 4294967294 Max keyfile length: 4398046510079 Recordlength: 2124 table description: Key Start Len Index Type Rec/key Root Blocksize 1 2 3 unique int24 1 1024 1024 2 5 765 unique char packed stripped 1 2048 4096 Field Start Length Nullpos Nullbit Type |