29. 使用MySQL之資料庫維護

hisun9發表於2024-11-20

1. 備份資料

像所有資料一樣,MySQL的資料也必須經常備份。由於MySQL資料庫是基於磁碟的檔案,普通的備份系統和例程就能備份MySQL的資料。但是,由於這些檔案總是處於開啟和使用狀態,普通的檔案副本備份不一定總是有效。

下面列出這個問題的可能解決方案。

  • 使用命令列實用程式mysqldump轉儲所有資料庫內容到某個外部檔案。在進行常規備份前這個實用程式應該正常執行,以便能正確地備份轉儲檔案。

  • 可用命令列實用程式mysqlhotcopy從一個資料庫複製所有資料(並非所有資料庫引擎都支援這個實用程式)。

  • 可以使用MySQL的BACKUP TABLESELECT INTO OUTFILE轉儲所有資料到某個外部檔案。這兩條語句都接受將要建立的系統檔名,此係統檔案必須不存在,否則會出錯。資料可以用RESTORE TABLE來複原。

補充

  • 首先重新整理未寫資料:

    為了保證所有資料被寫到磁碟(包括索引資料),可能需要在進行備份前使用FLUSH TABLES語句。

2. 進行資料庫維護

MySQL提供了一系列的語句,可以(應該)用來保證資料庫正確和正常執行。

以下是應該知道的一些語句。

  • ANALYZE TABLE,用來檢查表鍵是否正確。ANALYZE TABLE返回如下所示的狀態資訊:

    analyze table orders;
    

    輸出如下:

    img

  • CHECK TABLE用來針對許多問題對錶進行檢查。在MyISAM表上還對索引進行檢查。CHECK TABLE支援一系列的用於MyISAM表的方式。CHANGED檢查自最後一次檢查以來改動過的表。EXTENDED執行最徹底的檢查,FAST只檢查未正常關閉的表,MEDIUM檢查所有被刪除的連結並進行鍵檢驗,QUICK只進行快速掃描。如下所示,CHECKTABLE發現和修復問題:

    check table orders, orderitems;
    

    輸出如下:

    img

    插句題外話

    img

  • 如果MyISAM表訪問產生不正確和不一致的結果,可能需要用REPAIR TABLE來修復相應的表。這條語句不應該經常使用,如果需要經常使用,可能會有更大的問題要解決。

  • 如果從一個表中刪除大量資料,應該使用OPTIMIZE TABLE來收回所用的空間,從而最佳化表的效能。

3. 診斷啟動問題

伺服器啟動問題通常在對MySQL配置或伺服器本身進行更改時出現。MySQL在這個問題發生時報告錯誤,但由於多數MySQL伺服器是作為系統程序或服務自動啟動的,這些訊息可能看不到。

在排除系統啟動問題時,首先應該儘量用手動啟動伺服器。MySQL伺服器自身透過在命令列上執行mysqld啟動。

下面是幾個重要的mysqld命令列選項:

  • --help 顯示幫助—— 一個選項列表;

  • --safe-mode 裝載減去某些最佳配置的伺服器;

  • --verbose 顯示全文字訊息(為獲得更詳細的幫助訊息與--help聯合使用);

  • --version 顯示版本資訊然後退出。

幾個另外的命令列選項(與日誌檔案的使用有關)在下一節列出。

4. 檢視日誌檔案

MySQL維護管理員依賴的一系列日誌檔案。主要的日誌檔案有以下幾種。

  • 錯誤日誌。它包含啟動和關閉問題以及任意關鍵錯誤的細節。此日誌通常名為hostname.err,位於data目錄中。此日誌名可用--log-error命令列選項更改。

  • 查詢日誌。它記錄所有MySQL活動,在診斷問題時非常有用。此日誌檔案可能會很快地變得非常大,因此不應該長期使用它。此日誌通常名為hostname.log,位於data目錄中。此名字可以用--log命令列選項更改。

  • 二進位制日誌。它記錄更新過資料(或者可能更新過資料)的所有語句。此日誌通常名為hostname-bin,位於data目錄內。此名字可以用--log-bin命令列選項更改。注意,這個日誌檔案是MySQL5中新增的,以前的MySQL版本中使用的是更新日誌。

  • 緩慢查詢日誌。顧名思義,此日誌記錄執行緩慢的任何查詢。這個日誌在確定資料庫何處需要最佳化很有用。此日誌通常名為hostname-slow.log ,位於 data 目錄中。此名字可以用--log-slow-queries命令列選項更改。

在使用日誌時,可用FLUSH LOGS語句來重新整理和重新開始所有日誌檔案。

相關文章