你可能在使用mysql過程中,各種意外導致資料庫表的損壞,而且這些資料往往是最新的資料,通常不可能在備份資料中找到。本章將繼上篇文章中檢查出表的問題後,告訴你如何修復表。
一張損壞的表的症狀通常是查詢意外中斷並且你能看到例如這些錯誤:
◆ 「tbl_name.frm」被鎖定不能改變。
◆ 不能找到檔案「tbl_name.myi」(errcode :### )。
◆ 從表處理器的得到錯誤###(此時,錯誤135是乙個例外)。
◆ 意外的檔案結束。
◆ 記錄檔案被毀壞。
在這些情況下,你必須修復表。表的修復是一項非常困難的工作,很多情況下令人束手無策。然而,有一些常規的知道思想和過程,可以遵循它們來增加修正表的機會。通常,開始是可以用最快的修復方法,看看能否袖珍故障。如果發現不成功,可以逐步公升級到更徹底的但更慢的修復方法。如果仍舊難以修復,就應該從備份中恢復了。在上一章已經詳細介紹了這一部分內容。
簡單安全的修復
為了修復乙個表執行下列步驟:
◆ 首先,用--recover,-r選項修正表,並且用--quick,-q選項,來只根據索引檔案的內容進行恢復。這樣不接觸資料檔案來修復索引檔案。(-r意味著「恢復模式」)
myisamchk -r -q tbl_nameisamchk -r -q tbl_name
◆ 如果問題仍舊存在,則忽略--quick選項,允許修復程式修改資料檔案,因為這可能存在問題。下面的命令將從資料檔案中刪除不正確的記錄和已被刪除的記錄並重建索引檔案:
myisamchk -r tbl_nameisamchk -r tbl_name
◆ 如果前面的步驟失敗,使用。安全恢復模式使用乙個老的恢復方法,處理常規恢復模式不行的少數情況(但是更慢)。
myisamchk --safe-recover tbl_nameisamchk --safe-recover tbl_name
困難的修理
如果在索引檔案的第乙個16k塊被破壞,或包含不正確的資訊,或如果索引檔案丟失,你只應該到這個階段 。在這種情況下,建立乙個新的索引檔案是必要的。按如下這樣的步驟做:
◆ 定位到包含崩潰表的資料庫目錄中
◆ 把資料檔案移更安全的地方。
◆ 使用表描述檔案建立新的(空)資料和索引檔案:
shell> mysql db_namemysql> delete from tbl_name;mysql> quit
上述語句將重新建立新的空表,並使用表的的描述檔案tbl_name.frm重新生成新的資料和索引檔案。
◆ 將老的資料檔案拷貝到新建立的資料檔案之中。(不要只是將老檔案移回新檔案之中;你要保留乙個副本以防某些東西出錯。)
◆ 在使用標準的修復方法。現在myisamchk -r -q應該工作了。(這不應該是乙個無限迴圈)。
如果你擁有表的備份檔案,那麼一切過程就容易的多。從備份檔案中可以恢復表的描述檔案,然後在檢查表,有可能還要繼續使用標準的修復方法,應該糾可以解決問題了。
非常困難的修復
只有描述檔案也破壞了,你才應該到達這個階段。這應該從未發生過,因為在表被建立以後,描述檔案就不再改變了。
從乙個備份恢復描述檔案並且回到階段2。你也可以恢復索引檔案並且回到階段1。對於後者,你應該用myisamchk -r啟動。
如果因為某種原因,資料的備份檔案丟失或者沒有備份檔案,但是你還記得建立表的create table語句,那麼太好了,這樣還是可以恢復索引檔案:
◆ 定位到包含崩潰表的資料庫目錄中
◆ 把資料檔案移更安全的地方。再把資料庫目錄中的對應的目錄刪去.。
◆ 呼叫mysql併發復create table語句建立該錶。
◆ 退出mysql,將原始的資料檔案和索引檔案移回到資料庫的目錄中,替換剛才新建的檔案。
◆ 然後回到階段2,修復表。也可以只移回資料檔案,這樣保留新的描述和索引檔案,然後回到階段1,繼續用標準的方法修復表。
資料庫備份修復 如何通過備份修復表資料庫
資料庫備份修復 how to repair tables database by backup 如何通過備份 修復表資料庫 is this possible?這可能嗎?please explain how to repair.請說明如何修理。and thanks 謝謝 this post may h...
MySQL資料庫表修復 MyISAM
一 mysql中myisam表損壞原因總結 1 伺服器突然斷電導致資料檔案損壞 強制關機,沒有先關閉mysql 服務 mysqld 程序在寫表時被殺掉。2 磁碟損壞。3 伺服器宕機。4 mysql 本身的bug 二 mysql中myisam表損壞的症狀總結 1 查詢資料時報出錯誤 incorrect...
修復MYSQL資料庫
whereis mysql cd usr local mysql mysqlcheck u root p auto repair check optimize all databases 修復後看看大小 四種在mysql中修改root密碼的方法,可能對大家有所幫助 方法1 用set password...