監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 簽約案例 | 購買價格 | 在線試用 | 手機APP | 產(chǎn)品資料
X 關(guān)閉
重慶OA快博

當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 重慶OA系統(tǒng) > 重慶OA快博

檢測和解決表維護MySQL數(shù)據(jù)庫的問題

申請免費試用、咨詢電話:400-8352-114

日常工作管理中,數(shù)據(jù)庫管理員要做好維護MySQL數(shù)據(jù)庫管理的工作,若重新生成索引文件,我們又該怎樣做?下面由經(jīng)驗豐富的數(shù)據(jù)庫管理員講解怎樣做好維護MySQL數(shù)據(jù)庫管理的工作。

以下的文章主要向大家描述的是正確檢查與維護MySQL數(shù)據(jù)庫表的實際操作流程,以及在檢查與維護MySQL數(shù)據(jù)庫表的實際操作中值得我們大家留意的事項的具體描述,望你在瀏覽之后會有所收獲。

理想的情況是,MySQL(和PHP搭配之最佳組合)從首次安裝以來始終平穩(wěn)地運行。但有時確實會由于各種原因而出現(xiàn)問題,其范圍可以從電源斷電到硬件故障到不正常地關(guān)閉MySQL(和PHP搭配之最佳組合)服務(wù)器(如用kill -9終止服務(wù)器或機器崩潰)。

諸如這樣的情況大部分都超出您的控制范圍,它們會導(dǎo)致數(shù)據(jù)庫表的毀壞,尤其是在對表進行修改且未完全寫入時所引起的。

本章的重點是檢測和解決表的問題,而不論問題是如何引起的。對于表的檢查和修復(fù),MySQL(和PHP搭配之最佳組合)管理員最好的朋友是myisamchk 和isamchk 實用程序。這兩個程序有好幾個功能,我們已經(jīng)在前面討論了怎樣使用它們執(zhí)行索引鍵的分布分析和索引的釋放與激活。還可以使用它們檢查表和修復(fù)有問題的表。這使您能在表變壞之前(使表不能使用之前)修正故障。

myisamchk 和isamchk 提供的全部選項的清單在附錄E 中。有關(guān)其他的背景,請參閱MySQL(和PHP搭配之最佳組合)參考指南的“維護MySQL數(shù)據(jù)庫(和PHP搭配之最佳組合)安裝”一章。

表的故障檢測和維護MySQL數(shù)據(jù)庫的一般過程如下:

1) 檢查出錯的表。如果該表檢查通過,則完成任務(wù),否則必須修復(fù)它。

2) 在開始修復(fù)之前對表文件進行拷貝,以防萬一。

3) 試著修復(fù)表。

4) 如果修復(fù)操作失敗,從數(shù)據(jù)庫備份和更新日志中恢復(fù)此表。

上述過程的最后一步假定您已經(jīng)執(zhí)行了數(shù)據(jù)庫備份并允許更新日志有效。如果不是這樣的話,系統(tǒng)將有危險。參考第11章查找一下怎樣使用MySQL(和PHP搭配之最佳組合)aump 和怎樣開啟更新日志。您肯定不想不可挽回地丟失一個表,因此,應(yīng)努力地做備份。

在使用myisamchk 或isamchk 檢查或修復(fù)表之前,應(yīng)該滿足一些初步需求:

建立常規(guī)的數(shù)據(jù)庫備份過程并允許更新日志,以防事情越來越糟使表的毀壞不能修復(fù)。筆者好像在以前提醒過這一點?

在開始試驗之前應(yīng)先仔細地閱讀本章的內(nèi)容。尤其是不應(yīng)該在閱讀“避免與MySQL數(shù)據(jù)庫表服務(wù)器交互作用”之前進行操作,因為它將討論當(dāng)您試圖在一個表上執(zhí)行檢查或修復(fù)過程時服務(wù)器正在使用這個表所引起的問題。它還討論怎樣在服務(wù)器運行時防止那些問題發(fā)生。

當(dāng)運行表檢查或修復(fù)時,您應(yīng)該被注冊在運行MySQL(和PHP搭配之最佳組合)的賬號下,因為您需要對表文件讀寫訪問。

myisamchk 和isamchk 的調(diào)用語法

MySQL(和PHP搭配之最佳組合)的myisamchk 和isamchk 實用程序很類似,多數(shù)時候它們可以用同樣的方式使用。它們之間的主要區(qū)別是它們所使用的表的類型。對于MyISAM 表,使用my i s a m c h k,而對于ISAM 表,則使用i s a m c h k。您可以通過表的索引文件的擴展名來告訴表使用哪種存儲格式。擴展名“. M Y I”表明是一個MyISAM 表,而“. I S M”表明是ISAM 表。

為了使用任一個實用程序,應(yīng)指明您所要檢查或修復(fù)的表,以及指明要執(zhí)行的操作類型的選項:

% myisamchk options tbl_name...

% isamchk options tbl_name...

tbl_name 參數(shù)可以是表名也可以是該表的索引文件名。如果指定多個表,可以很容易地使用文件名模式來拾取目錄中所有相應(yīng)的文件:

% myisamchk options *.MYI

% isamchk options *.ISM

不會因為告訴了錯誤的程序來檢查某個表而使該表毀壞,但是除了發(fā)布一條警告消息外此程序不做任何事情。例如,下面的第一條語句將檢查當(dāng)前目錄中的所有MyISAM 表,而第二條語句只顯示一條警告消息:

% myisamchk *.MYI 正確

% myisamchk *.ISM 不正確─文件類型錯

不論是myisamchk 還是isamchk 都不對表所在的位置做任何判斷,因此,應(yīng)該或者在包含表文件的目錄中運行程序,或者指定表的路徑名。這允許您將表文件拷貝到另一個目錄中并用該拷貝進行操作。

檢查表

myisamchk 和isamchk 提供了表檢查方法,這些方法在徹底檢查表的程度方面有差異。通常用標(biāo)準(zhǔn)方法就足夠了。如果標(biāo)準(zhǔn)檢查報告沒有發(fā)現(xiàn)錯誤而您仍然懷疑有毀壞(或許因為查詢沒有正常地工作),可能要執(zhí)行更徹底的檢查。要想用任意一個實用程序執(zhí)行標(biāo)準(zhǔn)的表檢查,則不用帶任何選項直接調(diào)用即可:

% myisamchk tbl_name

% isamchk tbl_name

為了執(zhí)行擴充檢查,使用--extend-check 選項。該選項非常慢,但檢查極為徹底。對于該表的數(shù)據(jù)文件中的每個記錄,索引文件中的每個索引的相關(guān)鍵都被檢查以確保它真正指向正確的記錄。myisamchk 還有一個中間選項- - m e d i um - c h e c k,它不如擴展檢查徹底,但速度快。

如果對于--extend-check 檢查不報告錯誤,則可以肯定表是好的。如果您仍然感覺表有問題,那原因肯定在其他地方。應(yīng)重新檢查任何好像有問題的查詢以驗證查詢是正確書寫的。如果您認(rèn)為問題可能是MySQL數(shù)據(jù)庫表服務(wù)器的原因,應(yīng)考慮整理一份故障報告或升級到新的版本上。

如果myisamchk 或isamchk 報告表有錯誤,應(yīng)用下節(jié)中的說明修復(fù)它們。

修復(fù)表

表的修復(fù)是一項可怕的工作,如果具體問題非常獨特則更難進行。然而,有一些常規(guī)的指導(dǎo)思想和過程,可以遵循它們來增加修正表的機會。通常,開始時可以用最快的修復(fù)方法,看看是否能修正故障。如果發(fā)現(xiàn)不行的話,可以逐步升級到更徹底的(但更慢的)修復(fù)方法上,直到故障被修復(fù)或您不能繼續(xù)升級為止(實際上,大多數(shù)問題不用更大規(guī)模的和更慢的方法就能修正)。如果表不能修復(fù),則從備份中恢復(fù)該表。有關(guān)使用備份文件和更新日志進行恢復(fù)的指導(dǎo)在已第11章中給出。

1. 執(zhí)行標(biāo)準(zhǔn)的表修復(fù)

為了修復(fù)一個表,執(zhí)行下列步驟:

1) 試著用--recover 選項修正表,但也可以用--quick 選項試圖只根據(jù)索引文件的內(nèi)容進行恢復(fù)。這樣將不觸及數(shù)據(jù)文件:

% myisamchk --recover --quick tbl_name

% isamchk --recover --quick tbl_name

2) 如果問題仍存在,再試一下上一步的命令,但忽略--quick 選項,以允許my i s a m c h k或isamchk 前進并修改數(shù)據(jù)文件:

% myisamchk --recover tbl_name

% isamchk --recover tbl_name

3) 如果還不工作,試一試--safe-recover 修復(fù)方法。這種方法比普通的恢復(fù)方法要慢,但能夠修正-recover 方法不能修正的幾個問題:

% myisamchk --safe-recover tbl_name

% isamchk --safe-recover tbl_name

如果myisamchk 或isamchk 由于一個“C a n’t create new temp file: file_name” 的錯誤消息在任何一步中停止,應(yīng)該重復(fù)這個命令并增加--force 選項以迫使清除臨時文件。這個臨時文件可能是從上一次失敗的修復(fù)中留下的。

在修復(fù)表之前拷貝它們在執(zhí)行表修復(fù)前應(yīng)該遵循的一個常規(guī)的預(yù)防措施是做該表的新拷貝。這種情況未必出現(xiàn),但如果發(fā)生,則可以從拷貝文件中做該表的新的拷貝并試試另一種恢復(fù)方法。

2. 標(biāo)準(zhǔn)表修復(fù)方法失敗時怎么辦

如果標(biāo)準(zhǔn)的修復(fù)過程未能修復(fù)表,則索引文件可能在修復(fù)時丟失或毀壞。盡管未必可能,但還是有可能使表的描述文件丟失。不論哪種情況,都需要替換受影響的文件,然后再試試標(biāo)準(zhǔn)修復(fù)過程。

為了重新生成索引文件,可以使用下列過程:

1) 定位到包含崩潰表的數(shù)據(jù)庫目錄中。

2) 將該表的數(shù)據(jù)文件移到安全的地方。

3) 調(diào)用MySQL(和PHP搭配之最佳組合)并通過執(zhí)行下列語句重新創(chuàng)建新的空表,該語句使用表的描述文件tbl_name.frm 重新開始生成新的數(shù)據(jù)和索引文件:

MySQL(和PHP搭配之最佳組合)> DELETE FROM tbl_name;

4) 退出MySQL(和PHP搭配之最佳組合),將原始的數(shù)據(jù)文件移回到數(shù)據(jù)庫目錄中,替換剛建立的新的空文件。

5) 再試試標(biāo)準(zhǔn)表修復(fù)方法。

為了恢復(fù)該表的描述文件,可先從備份文件中恢復(fù),然后再試著用標(biāo)準(zhǔn)修復(fù)方法。如果由于某些原因沒有備份,但知道建立表的CREATE TABLE 語句,則仍可以恢復(fù)該文件:

1) 定位到包含崩潰表的數(shù)據(jù)庫目錄中。

2) 將該表的數(shù)據(jù)文件移動到安全的地方。如果想要使用索引的話,還需將索引文件移走。

3) 調(diào)用MySQL(和PHP搭配之最佳組合)并發(fā)布CREATE TABLE 語句建立該表。

4) 退出MySQL(和PHP搭配之最佳組合),將原始數(shù)據(jù)文件移回數(shù)據(jù)庫目錄中,替換剛才新建的數(shù)據(jù)文件。如果在步驟2移動了索引文件,則也要將其移回數(shù)據(jù)庫目錄中。

5) 再試試標(biāo)準(zhǔn)表修

以上的相關(guān)內(nèi)容就是對檢查和維護MySQL數(shù)據(jù)庫表的介紹,望你能有所收獲。
 

編輯推薦】

網(wǎng)管軟件專區(qū)

網(wǎng)絡(luò)管理者最易犯的十大低級錯誤

網(wǎng)絡(luò)管理基礎(chǔ)知識:網(wǎng)路管理模式

學(xué)習(xí)高效網(wǎng)絡(luò)管理技巧三招五式

IT運維管理專區(qū)

本文來自互聯(lián)網(wǎng),僅供參考
發(fā)布:2007-04-15 10:44    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:

泛普重慶OA快博其他應(yīng)用

重慶OA軟件 重慶OA新聞動態(tài) 重慶OA信息化 重慶OA客戶 重慶OA快博 重慶OA行業(yè)資訊 重慶軟件開發(fā)公司 重慶網(wǎng)站建設(shè)公司 重慶物業(yè)管理軟件 重慶餐飲管理軟件 重慶倉庫管理系統(tǒng) 重慶門禁系統(tǒng) 重慶微信營銷 重慶ERP 重慶監(jiān)控公司 重慶金融行業(yè)軟件 重慶B2B、B2C商城系統(tǒng)開發(fā) 重慶建筑施工項目管理系統(tǒng)開發(fā)