共計(jì) 1614 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān) MySQL 中怎么修復(fù)數(shù)據(jù)庫(kù)表,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
一張損壞的表的癥狀通常是查詢(xún)意外中斷并且你能看到例如這些錯(cuò)誤:
◆“tbl_name.frm”被鎖定不能改變。
◆ 不能找到文件“tbl_name.MYI”(Errcode:###)。
◆ 從表處理器的得到錯(cuò)誤 ###(此時(shí),錯(cuò)誤 135 是一個(gè)例外)。
◆ 意外的文件結(jié)束。
◆ 記錄文件被毀壞。
在這些情況下,你必須修復(fù)表。表的修復(fù)是一項(xiàng)非常困難的工作,很多情況下令人束手無(wú)策。然而,有一些常規(guī)的知道思想和過(guò)程,可以遵循它們來(lái)增加修正表的機(jī)會(huì)。通常,開(kāi)始是可以用最快的修復(fù)方法,看看能否袖珍故障。如果發(fā)現(xiàn)不成功,可以逐步升級(jí)到更徹底的但更慢的修復(fù)方法。如果仍舊難以修復(fù),就應(yīng)該從備份中恢復(fù)了。在上一章已經(jīng)詳細(xì)介紹了這一部分內(nèi)容。
簡(jiǎn)單安全的修復(fù)
為了修復(fù)一個(gè)表執(zhí)行下列步驟:
◆ 首先,用 –recover,- r 選項(xiàng)修正表,并且用 –quick,- q 選項(xiàng),來(lái)只根據(jù)索引文件的內(nèi)容進(jìn)行恢復(fù)。這樣不接觸數(shù)據(jù)文件來(lái)修復(fù)索引文件。(- r 意味著“恢復(fù)模式”)
myisamchk -r -q tbl_nameisamchk -r -q tbl_name
◆ 如果問(wèn)題仍舊存在,則忽略 –quick 選項(xiàng),允許修復(fù)程序修改數(shù)據(jù)文件,因?yàn)檫@可能存在問(wèn)題。下面的命令將從數(shù)據(jù)文件中刪除不正確的記錄和已被刪除的記錄并重建索引文件:
myisamchk -r tbl_nameisamchk -r tbl_name
◆ 如果前面的步驟失敗,使用。安全恢復(fù)模式使用一個(gè)老的恢復(fù)方法,處理常規(guī)恢復(fù)模式不行的少數(shù)情況(但是更慢)。
myisamchk –safe-recover tbl_nameisamchk –safe-recover tbl_name
困難的修理
如果在索引文件的第一個(gè) 16K 塊被破壞,或包含不正確的信息,或如果索引文件丟失,你只應(yīng)該到這個(gè)階段。在這種情況下,創(chuàng)建一個(gè)新的索引文件是必要的。按如下這樣的步驟做:
◆ 定位到包含崩潰表的數(shù)據(jù)庫(kù)目錄中
◆ 把數(shù)據(jù)文件移更安全的地方。
◆ 使用表描述文件創(chuàng)建新的 (空) 數(shù)據(jù)和索引文件:
shell db_namemysql DELETE FROM tbl_name;mysql quit
上述語(yǔ)句將重新創(chuàng)建新的空表,并使用表的的描述文件 tbl_name.frm 重新生成新的數(shù)據(jù)和索引文件。
◆ 將老的數(shù)據(jù)文件拷貝到新創(chuàng)建的數(shù)據(jù)文件之中。(不要只是將老文件移回新文件之中;你要保留一個(gè)副本以防某些東西出錯(cuò)。)
◆ 在使用標(biāo)準(zhǔn)的修復(fù)方法。現(xiàn)在 myisamchk -r - q 應(yīng)該工作了。(這不應(yīng)該是一個(gè)無(wú)限循環(huán))。
如果你擁有表的備份文件,那么一切過(guò)程就容易的多。從備份文件中可以恢復(fù)表的描述文件,然后在檢查表,有可能還要繼續(xù)使用標(biāo)準(zhǔn)的修復(fù)方法,應(yīng)該糾可以解決問(wèn)題了。
非常困難的修復(fù)
只有描述文件也破壞了,你才應(yīng)該到達(dá)這個(gè)階段。這應(yīng)該從未發(fā)生過(guò),因?yàn)樵诒肀粍?chuàng)建以后,描述文件就不再改變了。
從一個(gè)備份恢復(fù)描述文件并且回到階段 2。你也可以恢復(fù)索引文件并且回到階段 1。對(duì)于后者,你應(yīng)該用 myisamchk - r 啟動(dòng)。
如果因?yàn)槟撤N原因,數(shù)據(jù)的備份文件丟失或者沒(méi)有備份文件,但是你還記得建立表的 CREATE TABLE 語(yǔ)句,那么太好了,這樣還是可以恢復(fù)索引文件:
◆ 定位到包含崩潰表的數(shù)據(jù)庫(kù)目錄中
◆ 把數(shù)據(jù)文件移更安全的地方。再把數(shù)據(jù)庫(kù)目錄中的對(duì)應(yīng)的目錄刪去.。
◆ 調(diào)用 mysql 并發(fā)復(fù) CREATE TABLE 語(yǔ)句建立該表。
◆ 退出 mysql,將原始的數(shù)據(jù)文件和索引文件移回到數(shù)據(jù)庫(kù)的目錄中,替換剛才新建的文件。
◆ 然后回到階段 2,修復(fù)表。也可以只移回?cái)?shù)據(jù)文件,這樣保留新的描述和索引文件,然后回到階段 1,繼續(xù)用標(biāo)準(zhǔn)的方法修復(fù)表。
看完上述內(nèi)容,你們對(duì) MySQL 中怎么修復(fù)數(shù)據(jù)庫(kù)表有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。