【小白福利—初级DBA入门必看】MySQL常用工具介绍(十 一)——实用程序innochecksum

刚刚经历了一个被大雨洗刷过的周末,相信大家的心情也会如天气般雨过天晴,但是雨可以停,学习却不能停!今天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 - #注意最后的单杆

以上就是今天的内容,感兴趣的同学可以顺便复习一下之前的文章哦~点击这里浏览相关文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章