具體報錯以下:
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,問題就解決了。
問題分析:
一、
錯誤產生緣由,有網友說是頻繁查詢和更新dede_archives表形成的索引錯誤,由於個人頁面沒有靜態生成,而是動態頁面,所以比較贊成這種說法。
還有說法爲是MYSQL數據庫由於某種緣由而受到了損壞,如:數據庫服務器突發性的斷電、在提在數據庫表提供服務時對錶的原文件進行某種操做都有可能致使
MYSQL數據庫表被損壞而沒法讀取數據。總之就是由於某些不可測的問題形成表的損壞。
二、問題解決辦法。
當你試圖修復一個被破壞的表的問題時,有三種修復類型。若是你獲得一個錯誤信息指出一個臨時文件不能創建,刪除信息所指出的文件並再試一次--這一般是上一次修復操做遺留下來的。
這三種修復方法以下所示:
% 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文件應該能夠正常工做了,可是最好你仍是執行一下標準的修復(上面的第二種方法)。html
爲了避免冒失修復,故採起保守作法,咱們知道 MySQL 一個高效的管理工具即是 PhpMyAdmin,而在該管理軟件中就包含了對錶的檢查、分析、修復、優化功能,比起網上提供的含糊命令行來講更安全更簡便。mysql
經過實踐,在使用檢查表功能後確實發現了問題,以後使用修復功能進行了修復,反饋結果每一個表都已經 ok,再執行一次優化,從新測試訪問網站終於恢復了正常。一場災難就此避免……sql
固然,我遇到的情況還和這有些差異。我遇到的情況,服務器並不在我這邊,我只能進mysql管理平臺遠程管理,沒法找到對應的文件目錄,執行某一工具。個人處理方案是,針對錯誤的那幾個表,刪除掉而後從新建立填充數據。這個方案面對的是出問題的表的老數據不是很重要的狀況。數據庫