Amygo
作者Amygo2019-07-05 16:29
数据库管理员, oracle

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

字数 2202阅读 765评论 0赞 4

今天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 ]

2 . 选项介绍与部分选项举例说明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 - #注意最后的单杆

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


作者:Amy—go

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

4

添加新评论0 条评论

Ctrl+Enter 发表

关于TWT  使用指南  社区专家合作  厂商入驻社区  企业招聘  投诉建议  版权与免责声明  联系我们
© 2019  talkwithtrend — talk with trend,talk with technologist 京ICP备09031017号-30