Mysql表使用中,Mysql下修復MYISAM表, MySQL數據表損壞的巧妙修復

修復mysql表之前首先要知道是哪個表出了問題

可以用root登錄後在information_schema裏查找有問題的表名
select TABLE_SCHEMA as DB_DBNAME,TABLE_NAME from INFORMATION_SCHEMA.tables where engine is null;

可以通過事件查看器裏是否有


應用程序日誌--類型爲"錯誤"--事件來源爲"Mysql"的錯誤日誌,大概內容爲
xxxxx: Table '.xxxx' is marked as crashed and should be repaired

或者直接在phpmyadmin中查看有哪些表出了問題比如顯示“使用中”

如果查到問題表後,可以使用一下命令來修復mysql數據庫中的MYISAM表

1、check, repair

例如abc的test表有問題
# mysql -u root -p 'abc';   //登錄mysql控制檯,並進入abc數據庫mysql> check table test;  //如果有問題Msg_type裏會有warning或error。沒有問題的話出現的結果Status是OKmysql> repair table test;  // 修復test表(多個表名用“逗號”隔開)mysql> check table test; // 再次檢查確認是否修復成功
2. myisamchk, isamchk

其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的MySQL數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作爲缺省的數據表類型,這裏以myisamchk爲例子進行說明。當發現某個數據表出現問題時可以使用:

myisamchk tablename.MYI

進行檢測,如果需要修復的話,可以使用:
myisamchk -of tablename.MYI
關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL服務器沒有訪問這個MySQL數據表,保險的情況下是最好在進行檢測時把MySQL服務器Shutdown掉。

mysqladmin -uroot -p shutdown
另外可以把下面的命令放在你的rc.local裏面啓動MySQL服務器前:

[ -x /tmp/MySQL.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/MySQL.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/MySQL/MySQL.sock,對於使用源碼安裝則是/tmp/MySQL.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數據庫存放的位置。

需要注意的時,如果你打算把這條命令放在你的rc.local裏面,必須確認在執行這條指令時MySQL服務器必須沒有啓動!

3、檢測修復所有數據庫(表)

MySQLcheck -A -o -r -pmysqlcheck --all-databases -r
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章