mysql page校验_MySQL innochecksum 工具

MySQL innochecksum 工具主要用于MySQL innodb表空间文件的校验,通过读取表空间文件,计算页的checksum值,将计算的结果与页内存储的checksum值进行对比,检查对比结果是否一致,如果不一致,说明文件页可能发生了损坏,innochecksum工具同时提供了checksum校验值修复功能,能够将页checksum值不正确的页进行修复。

innochecksum只能用来离线校验innodb文件,如果文件已经被mysql server打开,则会报错,报错信息通常如下:

Error: Unable to lock file::/data/mysql/data_5.7.19/ibdata1

fcntl: Resource temporarily unavailable

innochecksum源码文件位于extra/innochecksum.cc,编译生成可执行文件innochecksum。下面将基于MySQL 5.7版本的innochecksum进行介绍。

主要参数:

--count,-c,返回表空间文件总的页数量--start-page=num, -s num,校验的起始页--end-page=num, -e num,校验的结束页--page=num, -p num,校验指定页--strict-check, -C,指定校验算法,只能指定为 innodb, crc32 或 none--no-check, -n,忽略checksum值校验,直接重写checksum值,这个参数通常和 --write参数一起使用--write=name, -w name,重写有效的checksum值,必须指定校验算法,innodb, crc32 或 none--allow-mismatches=num, -a num,允许checksum值校验不匹配的最大次数,超过这个次数,innochecksum终止继续校验--page-type-summary, -S,显示不同页类型的数量--page-type-dump, -D,把表空间中的页类型信息输出到文件或者标准输出--log, -l,指定日志文件,innochecksum执行过程中的日志信息输出到日志文件中下面是-c和-S参数的示例,如下图:

b6e24809ece6075edee556045421bbc3.png

修复页校验值:

下面通过一个实例来介绍innochecksum修复页校验值。

1、破坏页校验值

一个页的前4个字节存储了这个页的校验值,首先人为制造页校验值损坏,把第一个页的前4个字节修改成一个无效的值。比如下面把校验值由0xcc5535c6修改为0x61616161。

通过innochecksum计算校验值,发现page 0是无效的。

innochecksum /data/mysql/data_5.7.19/ibdata1

Fail: page 0 invalid

Exceeded the maximum allowed checksum mismatch count::0

2、修复页校验值

使用innochecksum进行修复。

innochecksum -w crc32 -n /data/mysql/data_5.7.19/ibdata1

修复完成后,再看一下前4个字节的checksum值,已经恢复成了0xcc5535c6。

整个过程如下图:

ba8ab768051e699305d9f8a5923c4fd0.png

最后:

innochecksum工具提供了非常简单、实用的方式来检查innodb表空间文件是否有效,同时提供了校验值修复功能,此外也可以通过这个工具,分析表空间文件中各种页类型的数量,对于理解innodb表空间文件结构有一定的帮助作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值