MySQL innodb 数据页一致性校验工具 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参数的示例,如下:
[root@localhost extra]# ./innochecksum -c /data/mysql/data_5.7.19/ibdata1
Number of pages:768
[root@localhost extra]# ./innochecksum -S /data/mysql/data_5.7.19/ibdata1
File::/data/mysql/data_5.7.19/ibdata1
================PAGE TYPE SUMMARY==============
#PAGE_COUNT PAGE_TYPE
===============================================
19 Index page
232 Undo log page
4 Inode page
0 Insert buffer free list page
412 Freshly allocated page
1 Insert buffer bitmap
98 System page
1 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: 142 insert, 90 update, 0 other
Undo page state: 0 active, 179 cached, 2 to_free, 0 to_purge, 0 prepared, 51 other