[MySQL]快速解決"is marked as crashed and should be repaired"故障

轉自:http://www.cnblogs.com/hakuci/archive/2012/03/20/2407723.html

具體報錯如下:

Table '.\Tablename\posts' is marked as crashed and should be repaired

提示說論壇的帖子表posts被標記有問題,需要修復。我記得以前也出現過類似的問題,但是隻要點擊Phpmyadmin上的repair按紐就自動修復了,但是這次很絕,什麼都沒有.於是趕快上網查找原因。最終將問題解決。解決方法如下:

找到mysql的安裝目錄的bin/myisamchk工具,在命令行中輸入:

myisamchk -c -r ../data/tablename/posts.MYI

然後myisamchk 工具會幫助你恢復數據表的索引。好象也不用重新啓動mysql,問題就解決了。

問題分析:

1、
錯誤產生原因,有網友說是頻繁查詢和更新dede_archives表造成的索引錯誤,因爲我的頁面沒有靜態生成,而是動態頁面,因此比較同意這種說法。
還有說法爲是MYSQL數據庫因爲某種原因而受到了損壞,如:數據庫服務器突發性的斷電、在提在數據庫表提供服務時對錶的原文件進行某種操作都有可能導致
MYSQL數據庫表被損壞而無法讀取數據。總之就是因爲某些不可測的問題造成表的損壞。


2、問題解決辦法。

當你試圖修復一個被破壞的表的問題時,有三種修復類型。如果你得到一個錯誤信息指出一個臨時文件不能建立,刪除信息所指出的文件並再試一次--這通常是上一次修復操作遺留下來的。
這三種修復方法如下所示:
% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName

第一種是最快的,用來修復最普通的問題;而最後一種是最慢的,用來修復一些其它方法所不能修復的問題。

檢查和修復MySQL數據文件
如果上面的方法無法修復一個被損壞的表,在你放棄之前,你還可以試試下面這兩個技巧:

果你懷疑表的索引文件(*.MYI)發生了不可修復的錯誤,甚至是丟失了這個文件,你可以使用數據文件(*.MYD)和數據格式文件(*.frm)重新生
成它。首先製作一個數據文件(tblName.MYD)的拷貝。重啓你的MySQL服務並連接到這個服務上,使用下面的命令刪除表的內容:
mysql> DELETE FROM tblName;

刪除表的內容的同時,會建立一個新的索引文件。退出登錄並重新關閉服務,然後用你剛纔保存的數據文件(tblName.MYD)覆蓋新的(空)數據文件。
最後,使用myisamchk執行標準的修復(上面的第二種方法),根據表的數據的內容和表的格式文件重新生成索引數據。

如果你的表的
格式文件(tblName.frm)丟失了或者是發生了不可修復的錯誤,但是你清楚如何使用相應的CREATE
TABLE語句來重新生成這張表,你可以重新生成一個新的.frm文件並和你的數據文件和索引文件(如果索引文件有問題,使用上面的方法重建一個新的)一
起使用。首先製作一個數據和索引文件的拷貝,然後刪除原來的文件(刪除數據目錄下有關這個表的所有記錄)。

啓動MySQL服務並使用當初的CREATE TABLE文件建立一個新的表。新的.frm文件應該可以正常工作了,但是最好你還是執行一下標準的修復(上面的第二種方法)。

 

 

        爲了不冒失修復,故採取保守做法,我們知道 MySQL 一個高效的管理工具便是 PhpMyAdmin,而在該管理軟件中就包含了對錶的檢查、分析、修復、優化功能,比起網上提供的含糊命令行來說更安全更簡便。



通過實踐,在使用檢查表功能後確實發現了問題,之後使用修復功能進行了修復,反饋結果每個表都已經 ok,再執行一次優化,重新測試訪問網站終於恢復了正常。一場災難就此避免……

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