可以用root登錄後在information_schema裏查找有問題的表名
select TABLE_SCHEMA as DB_DBNAME,TABLE_NAME from INFORMATION_SCHEMA.tables where engine is null;
可以通過事件查看器裏是否有
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