由于 MySQL 本身的讀寫及鎖定機制等方面的原因,與一些其他數據庫軟件一樣,在特殊情況下的極為頻繁讀寫時,或在服務器掉電、死機等情況下,相關的數據文件可能會發生被損壞的情況,通??梢圆捎靡韵碌姆绞郊右越鉀Q。
一:repair.php 修復工具
Discuz! 自帶了一個使用 PHP 編寫的數據表修復工具 repair.php,虛擬主機用戶也可使用。該工具位于軟件包的 ./utilities 目錄中,使用時需要上傳到服務器上論壇目錄(注意不要連 ./utilities 目錄一起上傳,否則無法運行),

upload.jpg
在瀏覽器運行后點擊下面的鏈接即可

run.jpg
修復以后如果出現下面的畫面表示修復成功!!!

result.jpg
這個工具能修復大多數常見的數據庫錯誤,尤其是錯誤號為 126、127 的錯誤,對 145 錯誤也可修復,同時能對數據表在修復之后進行優化。如果一次修復不成功,可以嘗試多次,或將數據庫重啟后再試。
二 :myisamchk 修復工具
MySQL 自帶了專門用戶數據表檢查和修復的工具——myisamchk,當 repair.php 多次修復均無法成功時,可以在服務器終端使用 myisamchk 進行修復。在 MySQL 的程序文件目錄(見《數據備份與恢復》中的說明)可以找到這個工具。
常用的修復命令為 myisamchk -r 數據文件目錄/數據表名.MYI,如果 -r 參數不能奏效,可以先把數據文件備份(備份可使用直接文件復制的方式,詳見《數據備份與恢復》中的說明)后使用 -o 參數,如果-o還不可以的話,就使用-f參數,如果還是無法修復,只有使用你的備份文件來恢復數據了!什么??你沒有備份文件

下面說一下具體的步驟:
1.

cmd.jpg
2.更改當前目錄到mysql/bin下面,一般情況下只有在這個下面才能運行myisamchk命令

myisamchk.jpg
3.修復的結果,如果修復后的情況都如下圖所示的話,你就可以



theresult.jpg
4.別忘了啟動你的mysql,要不你的網站還是運行不起來.


startmysql.jpg
ps:下面給的一個是linux下面的修復方法,和上面的基本相同.只是linux下面關閉和啟動mysql的方法和windows的不同.一般情況下linux用
CODE:
/etc/init.d/mysql stop service mysqld stop /etc/init.d/mysql start service mysqld start
來關閉和啟動mysql
linux.jpg
另外 MySQL 官方文檔中還提供了針對上面操作均無法奏效時的特殊辦法,如先清空重建數據表,然后再用備份的數據文件覆蓋等,這種特別復雜的情況用戶通常不會碰到,因此這里不再做過于深入的研究。
三:數據表經常性損壞的解決方法
--------------------------------------------------------------------------------
首先請確認在服務器硬件不存在問題(如內存工作不穩定、散熱條件不好等),且使用中的操作系統版本也沒有相關的 BUG 報告或升級補丁。這種情況下,如果數據庫仍出現經常性的損壞,請檢查是否 MySQL 的編譯方式或參數存在問題。通常情況下使用官方提供的編譯好的版本是比較穩定的,可以長期使用。如果您鐘愛自行編譯相關程序,請確認您的語言編譯器(如 gcc)和配置的相關參數沒有導致不穩定的因素。同時,磁盤分區滿也可能是導致數據表經常性損壞的原因。網上提供了一些問題的處理方法(英文),需要時可多參考,并針對您的具體服務器環境制定解決方案。