具體報錯如下:
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,再執行一次最佳化,重新測試訪問網站終於恢複了正常。一場災難就此避免……