用Myisamchk讓MySQL資料表更健康

2022-03-26 14:19:38 字數 3205 閱讀 4062

2011-03-15 09:15 水太深 itpub 字型大小:t | t

為了讓mysql資料庫中的資料表「更健康」,就需要對其進行定期體檢。在這裡筆者推薦使用myisamchk工具來對資料表進行不定期的檢查。同時筆者給出了一些相關的注意事項以及使用技巧。

在mysql資料庫中,資料表數以百計,資料庫管理員不可能有這麼多的時間和精力去依次檢查表的有效性,所以他們急需要一種工具,能 夠對相關的資料表進行體檢,以判斷表是否存在一些問題。這就好像我們每年都需要體檢一樣,發現小問題,即時進行修復,以免到時候病入膏肓。在這裡筆者推薦 使用myisamchk工具來對資料表進行不定期的檢查。在使用這個工具時,筆者要強調一下相關的注意事項以及使用技巧。

一、大表要增加記憶體的容量

myisamchk工具的使用效率主要跟表的大小有關。如果資料表比較大,則其執行的速度就會比較慢。在這種情況下,資料庫管理員可能需奧調整記憶體的配置。

通常情況下,-o引數決定myisamchk工具執行時所能夠使用的記憶體大小。當執行myisamchk時記憶體分配給其使用的空間不能夠超過這個參 數所指定的大小。如果資料庫管理員需要對每乙個大表使用myisamchk工具時,往往需要首先確定這個資料表的大小,並依此判斷所需要占用記憶體的大小。 預設情況下,恢復時可以採用的記憶體大小只有3m。對於大表來說,這點記憶體是不夠的。此時資料庫管理員可以調整記憶體的大小,讓myisamchk工具執行的 更快一點。

如果有需要的話,可以使用-o引數將記憶體調整為合適的大小。如-o sort=8m等等。一般情況下,這個值設定為16m即可。不需要太大,否則的話,會影響其它作業的執行。總之,在執行myisamchk工具之前,資料 庫管理員先需要評估一下資料庫中各個資料表的大小。如果有比較大的資料表,可以先將其過濾出來(如通過萬用字元等形式)。然後再調整記憶體的大小,並單獨對這 些大表進行檢查。這是提高myisamchk執行效率的乙個不錯的辦法。

二、利用myisamchk工具恢復資料時需要大量的硬碟空間

在使用myisamchk檢查資料表時,如果發現某些表存在問題,還可以使用myisamchk這個工具對其進行恢復。不過在恢復時,需要先確保有足夠的硬碟空間。否則的話,就可能導致資料表恢復失敗。

通常情況下,所需要使用的硬碟空間是資料表的一倍大小。即如果需要對2g的資料表進行恢復,那麼所需要的剩餘空間至少應該還有2g。即需要將資料文 件大小擴大為原來的一倍。如果硬碟空間不足,該怎麼辦呢?此時資料庫管理員可以考慮使用—quick選項。使用這個選項之後,進行修復時就不需要這麼多的 空間。不過需要注意,此時資料庫系統只是建立了索引檔案。

在某些情況下,在修復時需要重新建立索引檔案。此時代替舊索引檔案的新索引檔案也需要占用一定的磁碟空間。雖然說在修復工作一開始的時候,資料庫系 統就會對就索引檔案進行刪減。但是為了安全起見,筆者還是建議為其保留足夠的硬碟空間。並且在檔案系統上所需要的這個儲存空間的大小與原資料檔案是相同 的。

另外在使用myisamchk這個工具時,資料庫管理員可能會使用—recover選項。如果資料庫管理員採用這個選項的話,那麼就可以修復幾乎所 有一切的問題。不過注意這裡有乙個關鍵字幾乎。這也就是說,大部分資料表問題都可以通過這個選項來解決。但是也有一些例外。如當遇到唯一的鍵不唯一等問題 時,即時採用這個選項也是沒有辦法。一般情況下,資料庫管理員在恢復工作時可以先試用這個選項。當系統報告這個選項不可用時,再嘗試使用另外的恢復方式。 不過需要注意的是,使用這個選項時需要用到排序緩衝區空間。大致大小一般為資料的2倍。

綜上所述,在利用myisamchk這個工具對錶進行恢復操作時,需要保證其有足夠的磁碟空間。筆者的建議時,至少要有兩倍以上的資料檔案大小的磁碟空間。

三、逐步修復收損壞的資料表

如果不幸你的資料表受到損壞時,該怎麼進行修復呢?筆者認為,應該採用逐步修復的方式。不過在執行修復操作是,有兩個必要的步驟需要做。一是停止執行資料庫伺服器,二是對相關的資料檔案進行備份。雖然說myisamchk工具是乙個相對安全的資料檢查工具,但是在對資料進行恢復之前對資料檔案進行必要的備份,仍然是乙個必要的安全措施。在對對資料進行恢復時,通常可以按照下面的順序來操作。

一是檢查資料表,以判斷到底哪些資料表出現了問題,以及出現問題的大小。為了安全與效率的考慮,在修復時一般只 修復那些出現問題的資料表。在檢查資料表時,可以使用-update-state選項來告訴myisamchk工具哪些資料表是檢查過的,並且對有問題的 **會進行標識。 然後再修復時,可以指定myisamchk工具只修復那些報告有錯誤的**。

二是進行簡單安全的修復。在剛開始修復資料時,最好採用「快速恢復模式」。在這個模式下,資料庫系統並不接觸數 據檔案來修復索引檔案。如果資料檔案包含它應有的一切內容和指向資料檔案內正確的刪除連線,此時使用快速恢復模式就可以修復損壞的資料表,如果即使採用簡 單安全的修復,最好在修復開始之前對資料表做好備份工作。然後使用myisamchk –r 表名字 來恢復指定的資料表。執行這個命令之後,系統將從資料檔案中刪除不正確的紀錄和已經被刪除的記錄,並會重新建立索引檔案。如果採用這個模式還不能夠修復數 據檔案時,則採用下面乙個恢復模式。

三是索引檔案破壞情況下的恢復模式。如果資料庫**的索引檔案的第乙個16k塊被破壞掉,或者說包含不正確的信 息,又或者整個索引檔案丟失,在這種情況下,就需要建立乙個新的索引檔案。此時就需要用到下面談到的恢復模式。此時資料庫管理員需要先將資料檔案轉移到安 全地方,然後使用表描述檔案來建立新的資料檔案和索引檔案。然後再將老的資料檔案複製到新建立的資料檔案之中。然後再使用命令myisamchk –r-q來恢復資料表。如果只是索引檔案出現了問題,那麼使用這個命令就可以恢復資料。

四是最極端的情況,即表描述檔案也受到了損壞。此時就不能夠採用上面這個恢復模式。因為已經無法使用表描述檔案 來建立新的資料檔案和索引檔案。此時筆者建議,要採用資料庫恢復的方式,來恢復全部的資料檔案。在mysql資料庫中,可以根據需要設定完全備份或者增量 備份。如果表描述檔案也損壞時,那麼採用資料庫恢復的方式,無疑是最安全的方法。

當然myisamchk工具的功能不只上面這些。其下面有很多有趣的內容。如可以根據需要,修復某個指定的資料表。也可以使用萬用字元批量的檢查文 件。甚至可以對獨立的資料檔案進行檢查等等。不過需要注意的是,無論是採用哪種方式,都需要先對資料庫進行必要的備份。雖然說myisamchk這個工具 相對來說是比較安全的。但是養成在任何檢查與修復之前先對原有的資料進行備份,仍然是乙個不錯的資料庫管理習慣。

不過需要注意的是,myisamchk工具並不是萬能的。對於一些極端性的損壞,如**描述檔案損壞,這個工具就沒有用武之地了。為此資料庫管理員還是需要最好資料庫日常的備份工作。

asp搭配mysql 讓ASP搭配MYSQL

讓asp搭配mysql 所需要工具 mysql 4.1.11 win32 myodbc 3.51.11 1 dll myodbc 3.51.11 1 win mysqlcc 0.9.4 win32 註冊檔案mydbc.reg regedit4 hkey local machinesoftwareod...

CentOS環境用yum命令安裝Mysq資料庫

一 檢視自己系統裡是否已經安裝過mysql資料庫 root localhost rpm qa grep mysql 這個命令就會檢視該作業系統上是否已經安裝了mysql資料庫 如果已經安裝了資料庫先用 rpm e 或者是 rpm e nodeps命令來解除安裝。root localhost rpm ...

linux下用cmake編譯安裝mysql

編譯 linux下用cmake編譯安裝mysql 5.6.35 安裝cmake sudo pacman s cmake wget tar zxvf mysql 5.6.35.tar.gz cd mysql 5.6.35 建立資料存放目錄 mkdir p vhs mysql mysql56 建立使用者...