|
在MySQL數(shù)據(jù)庫中,數(shù)據(jù)表數(shù)以百計,數(shù)據(jù)庫管理員不可能有這么多的時間和精力去依次檢查表的有效性,所以他們急需要一種工具,能夠?qū)ο嚓P(guān)的數(shù)據(jù)表進(jìn)行體檢,以判斷表是否存在一些問題。這就好像我們每年都需要體檢一樣,發(fā)現(xiàn)小問題,即時進(jìn)行修復(fù),以免到時候病入膏肓。在這里筆者推薦使用Myisamchk工具來對數(shù)據(jù)表進(jìn)行不定期的檢查。在使用這個工具時,筆者要強調(diào)一下相關(guān)的注意事項以及使用技巧。
一、大表要增加內(nèi)存的容量
Myisamchk工具的使用效率主要跟表的大小有關(guān)。如果數(shù)據(jù)表比較大,則其運行的速度就會比較慢。在這種情況下,數(shù)據(jù)庫管理員可能需奧調(diào)整內(nèi)存的配置。
通常情況下,-O參數(shù)決定Myisamchk工具運行時所能夠使用的內(nèi)存大小。當(dāng)運行Myisamchk時內(nèi)存分配給其使用的空間不能夠超過這個參數(shù)所指定的大小。如果數(shù)據(jù)庫管理員需要對每一個大表使用Myisamchk工具時,往往需要首先確定這個數(shù)據(jù)表的大小,并依此判斷所需要占用內(nèi)存的大小。默認(rèn)情況下,恢復(fù)時可以采用的內(nèi)存大小只有3M。對于大表來說,這點內(nèi)存是不夠的。此時數(shù)據(jù)庫管理員可以調(diào)整內(nèi)存的大小,讓Myisamchk工具運行的更快一點。
如果有需要的話,可以使用-O參數(shù)將內(nèi)存調(diào)整為合適的大小。如-O sort=8M等等。一般情況下,這個值設(shè)置為16M即可。不需要太大,否則的話,會影響其它作業(yè)的運行。總之,在運行Myisamchk工具之前,數(shù)據(jù)庫管理員先需要評估一下數(shù)據(jù)庫中各個數(shù)據(jù)表的大小。如果有比較大的數(shù)據(jù)表,可以先將其過濾出來(如通過通配符等形式)。然后再調(diào)整內(nèi)存的大小,并單獨對這些大表進(jìn)行檢查。這是提高M(jìn)yisamchk運行效率的一個不錯的辦法。
二、利用Myisamchk工具恢復(fù)數(shù)據(jù)時需要大量的硬盤空間
在使用Myisamchk檢查數(shù)據(jù)表時,如果發(fā)現(xiàn)某些表存在問題,還可以使用Myisamchk這個工具對其進(jìn)行恢復(fù)。不過在恢復(fù)時,需要先確保有足夠的硬盤空間。否則的話,就可能導(dǎo)致數(shù)據(jù)表恢復(fù)失敗。
通常情況下,所需要使用的硬盤空間是數(shù)據(jù)表的一倍大小。即如果需要對2G的數(shù)據(jù)表進(jìn)行恢復(fù),那么所需要的剩余空間至少應(yīng)該還有2G。即需要將數(shù)據(jù)文件大小擴大為原來的一倍。如果硬盤空間不足,該怎么辦呢?此時數(shù)據(jù)庫管理員可以考慮使用quick選項。使用這個選項之后,進(jìn)行修復(fù)時就不需要這么多的空間。不過需要注意,此時數(shù)據(jù)庫系統(tǒng)只是創(chuàng)建了索引文件。
在某些情況下,在修復(fù)時需要重新創(chuàng)建索引文件。此時代替舊索引文件的新索引文件也需要占用一定的磁盤空間。雖然說在修復(fù)工作一開始的時候,數(shù)據(jù)庫系統(tǒng)就會對就索引文件進(jìn)行刪減。但是為了安全起見,筆者還是建議為其保留足夠的硬盤空間。并且在文件系統(tǒng)上所需要的這個存儲空間的大小與原數(shù)據(jù)文件是相同的。
另外在使用Myisamchk這個工具時,數(shù)據(jù)庫管理員可能會使用Recover選項。如果數(shù)據(jù)庫管理員采用這個選項的話,那么就可以修復(fù)幾乎所有一切的問題。不過注意這里有一個關(guān)鍵字幾乎。這也就是說,大部分?jǐn)?shù)據(jù)表問題都可以通過這個選項來解決。但是也有一些例外。如當(dāng)遇到唯一的鍵不唯一等問題時,即時采用這個選項也是沒有辦法。一般情況下,數(shù)據(jù)庫管理員在恢復(fù)工作時可以先試用這個選項。當(dāng)系統(tǒng)報告這個選項不可用時,再嘗試使用另外的恢復(fù)方式。不過需要注意的是,使用這個選項時需要用到排序緩沖區(qū)空間。大致大小一般為數(shù)據(jù)的2倍。
綜上所述,在利用Myisamchk這個工具對表進(jìn)行恢復(fù)操作時,需要保證其有足夠的磁盤空間。筆者的建議時,至少要有兩倍以上的數(shù)據(jù)文件大小的磁盤空間。
三、逐步修復(fù)收損壞的數(shù)據(jù)表
如果不幸你的數(shù)據(jù)表受到損壞時,該怎么進(jìn)行修復(fù)呢?筆者認(rèn)為,應(yīng)該采用逐步修復(fù)的方式。不過在執(zhí)行修復(fù)操作是,有兩個必要的步驟需要做。一是停止運行數(shù)據(jù)庫服務(wù)器,二是對相關(guān)的數(shù)據(jù)文件進(jìn)行備份。雖然說Myisamchk工具是一個相對安全的數(shù)據(jù)檢查工具,但是在對數(shù)據(jù)進(jìn)行恢復(fù)之前對數(shù)據(jù)文件進(jìn)行必要的備份,仍然是一個必要的安全措施。在對對數(shù)據(jù)進(jìn)行恢復(fù)時,通常可以按照下面的順序來操作。
一是檢查數(shù)據(jù)表,以判斷到底哪些數(shù)據(jù)表出現(xiàn)了問題,以及出現(xiàn)問題的大小。為了安全與效率的考慮,在修復(fù)時一般只修復(fù)那些出現(xiàn)問題的數(shù)據(jù)表。在檢查數(shù)據(jù)表時,可以使用-update-state選項來告訴Myisamchk工具哪些數(shù)據(jù)表是檢查過的,并且對有問題的表格會進(jìn)行標(biāo)識。 然后再修復(fù)時,可以指定Myisamchk工具只修復(fù)那些報告有錯誤的表格。
二是進(jìn)行簡單安全的修復(fù)。在剛開始修復(fù)數(shù)據(jù)時,最好采用快速恢復(fù)模式。在這個模式下,數(shù)據(jù)庫系統(tǒng)并不接觸數(shù)據(jù)文件來修復(fù)索引文件。如果數(shù)據(jù)文件包含它應(yīng)有的一切內(nèi)容和指向數(shù)據(jù)文件內(nèi)正確的刪除連接,此時使用快速恢復(fù)模式就可以修復(fù)損壞的數(shù)據(jù)表,如果即使采用簡單安全的修復(fù),最好在修復(fù)開始之前對數(shù)據(jù)表做好備份工作。然后使用Myisamchk r 表名字 來恢復(fù)指定的數(shù)據(jù)表。運行這個命令之后,系統(tǒng)將從數(shù)據(jù)文件中刪除不正確的紀(jì)錄和已經(jīng)被刪除的記錄,并會重新創(chuàng)建索引文件。如果采用這個模式還不能夠修復(fù)數(shù)據(jù)文件時,則采用下面一個恢復(fù)模式。
三是索引文件破壞情況下的恢復(fù)模式。如果數(shù)據(jù)庫表格的索引文件的第一個16K塊被破壞掉,或者說包含不正確的信息,又或者整個索引文件丟失,在這種情況下,就需要創(chuàng)建一個新的索引文件。此時就需要用到下面談到的恢復(fù)模式。此時數(shù)據(jù)庫管理員需要先將數(shù)據(jù)文件轉(zhuǎn)移到安全地方,然后使用表描述文件來創(chuàng)建新的數(shù)據(jù)文件和索引文件。然后再將老的數(shù)據(jù)文件復(fù)制到新創(chuàng)建的數(shù)據(jù)文件之中。然后再使用命令Myisamchk r-q來恢復(fù)數(shù)據(jù)表。如果只是索引文件出現(xiàn)了問題,那么使用這個命令就可以恢復(fù)數(shù)據(jù)。
四是最極端的情況,即表描述文件也受到了損壞。此時就不能夠采用上面這個恢復(fù)模式。因為已經(jīng)無法使用表描述文件來創(chuàng)建新的數(shù)據(jù)文件和索引文件。此時筆者建議,要采用數(shù)據(jù)庫恢復(fù)的方式,來恢復(fù)全部的數(shù)據(jù)文件。在MySQL數(shù)據(jù)庫中,可以根據(jù)需要設(shè)置完全備份或者增量備份。如果表描述文件也損壞時,那么采用數(shù)據(jù)庫恢復(fù)的方式,無疑是最安全的方法。
當(dāng)然Myisamchk工具的功能不只上面這些。其下面有很多有趣的內(nèi)容。如可以根據(jù)需要,修復(fù)某個指定的數(shù)據(jù)表。也可以使用通配符批量的檢查文件。甚至可以對獨立的數(shù)據(jù)文件進(jìn)行檢查等等。不過需要注意的是,無論是采用哪種方式,都需要先對數(shù)據(jù)庫進(jìn)行必要的備份。雖然說Myisamchk這個工具相對來說是比較安全的。但是養(yǎng)成在任何檢查與修復(fù)之前先對原有的數(shù)據(jù)進(jìn)行備份,仍然是一個不錯的數(shù)據(jù)庫管理習(xí)慣。
不過需要注意的是,Myisamchk工具并不是萬能的。對于一些極端性的損壞,如表格描述文件損壞,這個工具就沒有用武之地了。為此數(shù)據(jù)庫管理員還是需要最好數(shù)據(jù)庫日常的備份工作。
it知識庫:利用Myisamchk對MySQL數(shù)據(jù)表進(jìn)行體檢,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。