MySQL數據庫表損壞后的修復方法


步驟:
1.sql語句:check table tabTest;
如果出現的結果說Status是OK,則不用修復,如果有Error
2.Linux執行:
myisamchk -r -q /var/lib/mysql/db/test.MYI
3.sql語句:repair table tabTest;

4.sql語句:check table tabTest; Status是OK就修復好了

非Linux上:直接

 




參考:
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。 1. check table 和 repair table 登陸mysql 終端: mysql -uxxxxx -p dbname check table tabTest; 如果出現的結果說Status是OK,則不用修復,如果有Error,可以用: repair table tabTest; 進行修復,修復之后可以在用check table命令來進行檢查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。 2. myisamchk, isamchk 其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為缺省的數據表類型,這里以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用: myisamchk tablename.MYI 進行檢測,如果需要修復的話,可以使用: myisamchk -of tablename.MYI 關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL服務器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL服務器Shutdown掉。


1.MyISAM表損壞 用myisamchk命令來修復 myisamchk -r -q 后面跟你的表名.MYI 這個命令是專門修復myism引擎數據庫表的。比如,你的數據庫目錄為 /var/lib/mysql/db 其中一個表為 test 那么修復test表的方法為 myisamchk -r -q /var/lib/mysql/db/test.MYI 如果修復全部表,用這個命令 myisamchk -r -q /var/lib/mysql/db/*.MYI 2.InnoDB表損壞 InnoDB擁有內部恢復機制,假如數據庫崩潰了,InnoDB通過從最后一個時間戳開始運行日志文件,來嘗試修復數據庫。 大多數情況下會修復成功,而且整個過程是透明的。 假如InnoDB自行修復失敗,那么數據庫將不能啟動。 在繼續操作前,先瀏覽下MySQL的日志文件,確定數據庫是因為InnoDB表的損壞而崩潰。 有一種方法是更新InnoDB的日志文件計數器以跳過引起崩潰的查詢,這種情況下,將造成數據的不一致性而且會經常使主從復制中斷。 一旦確定MySQL因為InnoDB表損壞無法啟動時,就可以按照以下5步進行修復: 1.編輯/etc/my.cnf文件,加入如下行: innodb_force_recovery = 4 2.這時就可以重新啟動數據庫了,在innodb_force_recovery配置的作用,所有的插入與更新操作將被忽略; 3.導出所有的數據表; 4.關閉數據庫並刪除所有數據表文件及目錄,再運行 mysql_install_db來創建MySQL默認數據表; 5.在/etc/my.cnf中刪除innodb_force_recovery這一行,再啟動MySQL(這時MySQL正常啟動); 6.從第3步備份的文件中恢復所有的數據。 innodb_force_recovery可以設置為1-6,大的數字包含前面所有數字的影響。當設置參數值大於0后,可以對表進行select,create,drop操作,但insert,update或者delete這類操作是不允許的。 
1(SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁。
2(SRV_FORCE_NO_BACKGROUND):阻止主線程的運行,如主線程需要執行full purge操作,會導致crash。
3(SRV_FORCE_NO_TRX_UNDO):不執行事務回滾操作。
4(SRV_FORCE_NO_IBUF_MERGE):不執行插入緩沖的合並操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存儲引擎會將未提交的事務視為已提交。
6(SRV_FORCE_NO_LOG_REDO):不執行前滾的操作。

參考:
rpm安裝默認目錄:
數據文件:/var/lib/mysql/
配置文件模板:/usr/share/mysql
mysql客戶端工具目錄:/usr/bin
日志目錄:/var/log/
pid,sock文件目錄:/tmp/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM