剛剛經歷了一個被大雨洗刷過的週末,相信大家的心情也會如天氣般雨過天晴,但是雨可以停,學習卻不能停!今天Amy更新的內容依然是MySQL常用工具之實用程序innochecksum,相信經過前幾篇文章的學習,大家對這節內容的學習一定不會感到吃力。
1 . 簡介
innochecksum可以打印innodb表空間文件的校驗碼,可以重寫表空間文件的校驗碼,也可以統計每個表空間各種頁類型的數量,可以指出每個表空間文件的頁的類型。
該工具讀表空間文件,計算每頁的校驗碼,將其與存儲在表空間校驗碼對比,若不匹配,則說明頁以損壞,則有必要從備份中恢復或嘗試啓動服務器來備份表空間中的表。
該軟件最初用來掉電後加速驗證表空間文件的完整性,但也可以用於文件複製後的文件完整性驗證。
因爲校驗碼不匹配會導致innodb將正在的服務器關閉,故此在某個停機時段使用該工具校驗表空間文件先保證頁沒有損壞是有用的。
工具不能用於被服務器打開的表空間。若已經打開,應當使用check table來驗證。嘗試使用innochecksum來驗證將導致 “Unable to lock file”錯誤。
調用方式:
Usage: innochecksum [-c] [-s ] [-e ] [-p ] [-v] [-a ] [-n] [-C ] [-w ] [-S] [-D ] [-l ] <filename or [-]>
2 . 選項介紹與部分選項舉例說明
默認模式是進行頁校驗碼檢查,必須指定–log才能看到輸出的校驗碼;
此外還有-c和-w模式,其同樣需要–log來記錄內容。
附加功能可以在默認的頁校驗碼模式時任意附加,而不影響校驗模式使用。
3 . 常見用法舉例:
打印該目錄下的table1.ibd文件第600-700頁的校驗碼到logtest.txt
shell> innochecksum --verbose --log=/var/lib/mysql/test/logtest.txt -s 600 -e 700 table1.ibd
#最多重寫一個tab1.ibd的innodb校驗碼以覆蓋無效的校驗碼
shell> innochecksum --no-check --write innodb …/data/test/tab1.ibd --allow-mismatches=1
stdout文件tab1.ibd中每種頁的數量
shell> innochecksum --page-type-summary …/data/test/tab1.ibd
File::…/data/test/tab1.ibd
================ PAGE TYPE SUMMARY ======
PAGE_COUNT PAGE_TYPE
==========================
2 Index page
0 Undo log page
1 Inode page
0 Insert buffer free list page
2 Freshly allocated page
1 Insert buffer bitmap
0 System page
0 Transaction system page
1 File Space Header
0 Extent descriptor page
0 BLOB page
0 Compressed BLOB page
0 Other type of page
===============================================
Additional information:
Undo page type: 0 insert, 0 update, 0 other
Undo page state: 0 active, 0 cached, 0 to_free, 0 to_purge, 0 prepared, 0 other
#覆蓋寫目錄下每個ibd每個頁的類型到ztd文件。
#讀取t1.ibd的內容,並將內容中校驗碼重寫後保存爲a.ibd
shell> cat t1.ibd | innochecksum --write=crc32 - > a.ibd
在linux上的特定功能:可以使用glob形式的模式拓展來指定多個文件,如
對test數據庫的所有ibd文件運行innochecksum
shell> innochecksum ./data/test/.ibd
對test數據庫的所有以t開頭ibd文件運行innochecksum
shell> innochecksum ./data/test/t.ibd
對data目錄下所有目錄下的ibd文件運行innochecksum
shell> innochecksum ./data//.ibd
當系統表空間由幾個文件構成一個邏輯系統表空間時,需要將多個表空間文件合併輸入到mysqlchecksum。如ibdata1,2,3共三個文件組成系統表空間時可以這麼使用innochecksum:
shell> cat ibdata* | innochecksum - #注意最後的單杆
以上就是今天的內容,感興趣的同學可以順便複習一下之前的文章哦~點擊這裏瀏覽相關文章。