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