www.zjcoo.com
由MySQL用來(lái)存儲數(shù)據的文件格式以已經被廣泛地測試過,但(dàn)是總是有(yǒu)外部情況可(kě)以導緻數(shù)據庫表被破壞:
mysqld進程在一個(gè)寫入當中被殺死;計(jì)算(suàn)機的意外關閉(例如,如果計(jì)算(suàn)機掉電(diàn));一個(gè)硬件錯誤。
這章描述如何檢查和(hé)處理(lǐ)在MySQL數(shù)據庫中的數(shù)據損壞。如果你(nǐ)的表損壞很(hěn)多(duō),你(nǐ)應該嘗試找出其原因!見G.1 調試一個(gè)MySQL服務器(qì)。
在執行(xíng)崩潰恢複時(shí),理(lǐ)解在一個(gè)數(shù)據庫中的每一個(gè)表tbl_name對應的在數(shù)據庫目錄中的3個(gè)文件是很(hěn)重要的:
文件 用途
“tbl_name.frm” 表定義(表格)文件
“tbl_name.MYD” 數(shù)據文件
“tbl_name.MYI” 索引文件
這3個(gè)文件的每一個(gè)文件類型可(kě)能遭受不同形式的損壞,但(dàn)是問題最常發生(shēng)在數(shù)據文件和(hé)索引文件。
myisamchk通(tōng)過一行(xíng)一行(xíng)地創建一個(gè)“.MYD”(數(shù)據 )文件的副本來(lái)工作(zuò),它通(tōng)過由删除老的“.MYD 文件并且重命名新文件到原來(lái)的文件名結束修複階段。如果你(nǐ)使用--quick,myisamchk不創建一個(gè)臨時(shí)“.MYD”文件,隻是假定“.MYD”文件是正确的并且僅創建一個(gè)新的索引文件,不接觸“.MYD”文件,這是安全的,因為(wèi)myisamchk自動檢測“.MYD”文件是否損壞并且在這種情況下,放棄修複。你(nǐ)也可(kě)以給myisamchk兩個(gè)--quick選項。在這種情況下,myisamchk不會(huì)在一些(xiē)錯誤上(shàng)(象重複鍵)放棄,相反試圖通(tōng)過修改“.MYD”文件解決它們。通(tōng)常,隻有(yǒu)在你(nǐ)在太少(shǎo)的空(kōng)閑磁盤空(kōng)間(jiān)上(shàng)實施一個(gè)正常修複,使用兩個(gè)--quick選項才有(yǒu)用。在這種情況下,你(nǐ)應該至少(shǎo)在運行(xíng)myisamchk前做(zuò)一個(gè)備份。
一、怎樣檢查表的錯誤
為(wèi)了檢查一張表,使用下列命令:
myisamchk tbl_name
這能找出所有(yǒu)錯誤的99.99%。它不能找出的是僅僅涉及數(shù)據文件的損壞(這很(hěn)不常見)。如果你(nǐ)想要檢查一張表,你(nǐ)通(tōng)常應該沒有(yǒu)選項地運行(xíng)myisamchk或用-s或--silent選項的任何一個(gè)。
myisamchk -e tbl_name
它做(zuò)一個(gè)完全徹底的數(shù)據檢查(-e意思是“擴展檢查”)。它對每一行(xíng)做(zuò)每個(gè)鍵的讀檢查以證實他們确實指向正确的行(xíng)。這在一個(gè)有(yǒu)很(hěn)多(duō)鍵的大(dà)表上(shàng)可(kě)能花(huā)很(hěn)長時(shí)間(jiān)。myisamchk通(tōng)常将在它發現第一個(gè)錯誤以後停止。如果你(nǐ)想要獲得(de)更多(duō)的信息,你(nǐ)能增加--verbose(-v)選項。這使得(de)myisamchk繼續一直到最多(duō)20個(gè)錯誤。在一般使用中,一個(gè)簡單的myisamchk(沒有(yǒu)除表名以外的參數(shù))就足夠了。
myisamchk -e -i tbl_name
象前面的命令一樣,但(dàn)是-i選項告訴myisamchk還(hái)打印出一些(xiē)統計(jì)信息。
二、怎樣修複表
一張損壞的表的症狀通(tōng)常是查詢意外中斷并且你(nǐ)能看到例如這些(xiē)錯誤:
“tbl_name.frm”被鎖定不能改變。
不能找到文件“tbl_name.MYI”(Errcode :### )。
從表處理(lǐ)器(qì)的得(de)到錯誤###(此時(shí),錯誤135是一個(gè)例外)。
意外的文件結束。
記錄文件被毀壞。
在這些(xiē)情況下,你(nǐ)必須修複表。myisamchk通(tōng)常能檢測并且修複出錯的大(dà)部分東西。
修複過程包含最多(duō)4個(gè)階段,在下面描述。在你(nǐ)開(kāi)始前,你(nǐ)應該cd到數(shù)據庫目錄和(hé)檢查表文件的權限,确保他們可(kě)被運行(xíng)mysqld的Unix用戶讀取(和(hé)你(nǐ),因為(wèi)你(nǐ)需要存取你(nǐ)正在檢查的文件)。如果它拒絕你(nǐ)修改文件,他們也必須是可(kě)被你(nǐ)寫入的。
階段1:檢查你(nǐ)的表
運行(xíng)
myisamchk *.MYI
或(myisamchk -e *.MYI,如果你(nǐ)有(yǒu)更多(duō)的時(shí)間(jiān))。使用-s(沉默)選項禁止不必要的信息。
你(nǐ)必須隻修複那(nà)些(xiē)myisamchk報告有(yǒu)一個(gè)錯誤的表。對這樣的表,繼續到階段2。
如果在檢查時(shí),你(nǐ)得(de)到奇怪的錯誤(例如out of memory錯誤),或如果myisamchk崩潰,到階段3。
階段2 :簡單安全的修複
首先,試試myisamchk -r -q tbl_name(-r -q意味着“快速恢複模式”)。這将試圖不接觸數(shù)據文件來(lái)修複索引文件。如果數(shù)據文件包含它應有(yǒu)的一切和(hé)在數(shù)據文件指向正确地點的删除連接,這應該管用并且表可(kě)被修複。開(kāi)始修理(lǐ)下一張表。否則,使用下列過程:
在繼續前做(zuò)數(shù)據文件的一個(gè)備份。
使用myisamchk -r tbl_name(-r意味着“恢複模式”)。這将從數(shù)據文件中删除不正确的記錄和(hé)已被删除的記錄并重建索引文件。
如果前面的步驟失敗,使用myisamchk --safe-recover tbl_name。安全恢複模式使用一個(gè)老的恢複方法,處理(lǐ)常規恢複模式不行(xíng)的少(shǎo)數(shù)情況(但(dàn)是更慢)。 如果在修複時(shí),你(nǐ)得(de)到奇怪的錯誤(例如out of memory錯誤),或如果myisamchk崩潰,到階段3。
階段3 :困難的修理(lǐ)
如果在索引文件的第一個(gè)16K塊被破壞,或包含不正确的信息,或如果索引文件丢失,你(nǐ)隻應該到這個(gè)階段 。在這種情況下,創建一個(gè)新的索引文件是必要的。按如下這樣做(zuò):
把數(shù)據文件移更安全的地方。
使用表描述文件創建新的(空(kōng))數(shù)據和(hé)索引文件:
shell> mysql db_name
mysql> DELETE FROM tbl_name;
mysql> quit
将老的數(shù)據文件拷貝到新創建的數(shù)據文件之中。(不要隻是将老文件移回新文件之中;你(nǐ)要保留一個(gè)副本以防某些(xiē)東西出錯。)
回到階段2。現在myisamchk -r -q應該工作(zuò)了。(這不應該是一個(gè)無限循環)。
階段4:非常困難的修複
隻有(yǒu)描述文件也破壞了,你(nǐ)才應該到達這個(gè)階段。這應該從未發生(shēng)過,因為(wèi)在表被創建以後,描述文件就不再改變了。
從一個(gè)備份恢複描述文件并且回到階段3。你(nǐ)也可(kě)以恢複索引文件并且回到階段2。對後者,你(nǐ)應該用myisamchk -r啓動。
如果你(nǐ)沒有(yǒu)一個(gè)備份但(dàn)是确切地知道(dào)表是怎樣被創建的,在另一個(gè)數(shù)據庫中創建表的一個(gè)拷貝。删除新的數(shù)據文件,然後從其他數(shù)據庫将描述和(hé)索引文件移到破壞的數(shù)據庫中。這給了你(nǐ)新的描述和(hé)索引文件,但(dàn)是讓數(shù)據文件獨自留下來(lái)了。回到階段2并且嘗試重建索引文件。
三、表優化
為(wèi)了組合成碎片的記錄并且消除由于删除或更新記錄而浪費的空(kōng)間(jiān), 以恢複模式運行(xíng)myisamchk:
shell> myisamchk -r tbl_name
你(nǐ)可(kě)以用SQL的OPTIMIZETABLE語句使用的相同方式來(lái)優化一張表,OPTIMIZE TABLE比較容易,但(dàn)是myisamchk更快。也沒有(yǒu)在一個(gè)實用程序和(hé)服務器(qì)之間(jiān)不必要的交互可(kě)能性,因為(wèi)當你(nǐ)使用OPTIMIZE TABLE時(shí),服務器(qì)做(zuò)所有(yǒu)的工作(zuò)。
myisamchk也有(yǒu)你(nǐ)可(kě)用來(lái)改進一個(gè)表的性能的很(hěn)多(duō)其他選項:
-S, --sort-index
-R index_num, --sort-records=index_num
-a, --analyze
對于選項完整的描述見myisamchk調用語法。
重慶中技互聯網信息咨詢有限公司 www.zjcoo.com
企業網站(zhàn)建設解決方案 營銷型網站(zhàn)建設解決方案 行(xíng)業門(mén)戶網站(zhàn)建設解決方案 外貿網站(zhàn)解建設決方案 品牌形象網站(zhàn)建設解決方案 購物商城網站(zhàn)建設解決方案 政府網站(zhàn)建設解決方案 手機網站(zhàn)建設解決方案 教育培訓網站(zhàn)建設解決方案 珠寶高(gāo)端奢飾品網站(zhàn)建設解決方案 房(fáng)地産、地産項目網站(zhàn)建設解決方案 集團、上(shàng)市企業網站(zhàn)建設解決方案 數(shù)碼、電(diàn)子産品網站(zhàn)建設解決方案 美容、化妝品行(xíng)業網站(zhàn)建設解決方案
10年專業互聯網服務經驗 重慶最專業網站(zhàn)團隊 資深行(xíng)業分析策劃 B2C營銷型網站(zhàn)建設領先者 最前沿視(shì)覺設計(jì)、研發能力 時(shí)刻最新技(jì)術(shù)領先研發能力 具有(yǒu)完備的項目管理(lǐ) 完善的售後服務體(tǐ)系 深厚的網絡運營經驗
中技(jì)互聯一直秉承專業、誠信、服務、進取的價值觀,堅持優秀的商業道(dào)德,以用戶最終價值為(wèi)導向,向用戶提供優質産品和(hé)優質服務,從而赢得(de)了用戶的信賴。始終以不懈的努力、更高(gāo)的目标來(lái)要求自己。
主營業務:網站(zhàn)建設 | 重慶網站(zhàn)建設 | 重慶網站(zhàn)設計(jì) | 重慶網站(zhàn)制(zhì)作(zuò) | 重慶網頁設計(jì) | 重慶網站(zhàn)開(kāi)發
CopyrightZJCOO technology Co., LTD. All Rights Reserved.
渝ICP 備11003429号