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

upload.jpg
在瀏覽器運(yùn)行后點(diǎn)擊下面的鏈接即可

run.jpg
修復(fù)以后如果出現(xiàn)下面的畫面表示修復(fù)成功!!!

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

下面說(shuō)一下具體的步驟:
1.

cmd.jpg
2.更改當(dāng)前目錄到mysql/bin下面,一般情況下只有在這個(gè)下面才能運(yùn)行myisamchk命令

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



theresult.jpg
4.別忘了啟動(dòng)你的mysql,要不你的網(wǎng)站還是運(yùn)行不起來(lái).


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