10、MySQL 8.0参考手册 4.6.2 innochecksum - 离线InnoDB文件校验和实用程序

innochecksum打印InnoDB文件的校验和 此工具读取 InnoDB表空间文件,计算每个页面的校验和,将计算的校验和与存储的校验和进行比较,并报告指示损坏页面的不匹配。它最初是为了加速验证停电后表空间文件的完整性而开发的,但也可以在文件复制后使用。由于校验和不匹配导致 InnoDB故意关闭正在运行的服务器,因此最好使用此工具而不是等待生产服务器遇到损坏的页面。

innochecksum不能用于服务器已经打开的表空间文件。对于这样的文件,您应该使用CHECK TABLE检查表空间内的表。试图在服务器已打开的表空间上运行 innochecksum将导致无法锁定文件 ”错误。

如果发现校验和不匹配,您通常会从备份中恢复表空间或启动服务器,并尝试使用 mysqldump对表空间内的表进行备份。

像这样 调用innochecksum

shell> innochecksum [options] file_name
innochecksum选项

innochecksum支持以下选项。对于引用页码的选项,这些数字是从零开始的。

  • --help, -?

    显示命令行帮助。用法示例:

    shell> innochecksum --help
  • --info, -I

    的同义词--help显示命令行帮助。用法示例:

    shell> innochecksum --info
  • --version, -V

    显示版本信息。用法示例:

    shell> innochecksum --version
  • --verbose, -v

    详细模式; 每五秒打印一次进度指示器到日志文件。为了打印进度指示器,日志文件必须使用 --log option要打开 verbose模式,请运行:

    shell> innochecksum --verbose

    要关闭详细模式,请运行:

    shell> innochecksum --verbose=FALSE

    --verbose选项与 --log选项可以同时指定。例如:

    shell> innochecksum --verbose --log=/var/lib/mysql/test/logtest.txt

    要在日志文件中查找进度指示器信息,可以执行以下搜索:

    shell> cat ./logtest.txt | grep -i "okay"

    日志文件中的进度指示器信息与以下内容类似:

    page 1663 okay: 2.863% done
    page 8447 okay: 14.537% done
    page 13695 okay: 23.568% done
    page 18815 okay: 32.379% done
    page 23039 okay: 39.648% done
    page 28351 okay: 48.789% done
    page 33023 okay: 56.828% done
    page 37951 okay: 65.308% done
    page 44095 okay: 75.881% done
    page 49407 okay: 85.022% done
    page 54463 okay: 93.722% done
    ...
  • --count, -c

    打印文件中的页数并退出。用法示例:

    shell> innochecksum --count ../data/test/tab1.ibd
  • --start-page=num, -s num

    从这个页码开始。用法示例:

    shell> innochecksum --start-page=600 ../data/test/tab1.ibd

    要么:

    shell> innochecksum -s 600 ../data/test/tab1.ibd
  • --end-page=num, -e num

    结束于此页码。用法示例:

    shell> innochecksum --end-page=700 ../data/test/tab1.ibd

    要么:

    shell> innochecksum --p 700 ../data/test/tab1.ibd
  • --page=num, -p num

    只检查这个页码。用法示例:

    shell> innochecksum --page=701 ../data/test/tab1.ibd
  • --strict-check, -C

    指定一个严格的校验和算法。选项包括 innodbcrc32,和 none

    在这个例子中,innodb指定校验和算法:

    shell> innochecksum --strict-check=innodb ../data/test/tab1.ibd

    在这个例子中,crc32指定校验和算法:

    shell> innochecksum -C crc32 ../data/test/tab1.ibd

    以下条件适用:

    • 如果你没有指定 --strict-check 选项,innochecksum验证innodb, crc32none

    • 如果指定该none选项,则只none允许生成的校验和

    • 如果指定该innodb选项,则只innodb 允许生成的校验和

    • 如果指定该crc32选项,则只crc32允许生成的校验和

  • --no-check, -n

    重写校验和时忽略校验和验证。该选项只能与innochecksum --write选项一起使用 如果 --write没有指定选项,innochecksum将终止。

    在这个例子中,innodb校验和被重写以替换无效校验和:

    shell> innochecksum --no-check --write innodb ../data/test/tab1.ibd
  • --allow-mismatches, -a

    innochecksum终止 前允许的校验和不匹配的最大数量 默认设置为0。如果 --allow-mismatches=N,其中N>=0, N错配被允许和 innochecksum在终止 N+1当 --allow-mismatches设置为0时, innochecksum在第一个校验和不匹配时终止。

    在这个例子中,现有的innodb 校验和被重写 --allow-mismatches为1。

    shell> innochecksum --allow-mismatches=1 --write innodb ../data/test/tab1.ibd

    随着--allow-mismatches设置为1,如果在600页和1000页文件不匹配另一个在700页,校验为0-599和601-699页进行更新。由于 --allow-mismatches设置为1,所以校验和可以容忍第一个不匹配,并在第二个不匹配时终止,从而使页面600和页面700-999保持不变。

  • --write=name, -w num

    重写校验和。当重写无效校验和时,该 --no-check选项必须与--write选项一起使用--no-check选项告诉innochecksum忽略对无效校验和的验证。--no-check如果当前校验和有效,则不必指定 选项。

    使用该--write选项时必须指定一个算法 --write选项的可能值为

    • innodb:使用原始算法从软件中计算校验和 InnoDB

    • crc32:使用该crc32算法计算的校验和,可能使用硬件辅助进行。

    • none:一个常数。

    --write选项将整个页面重写到磁盘。如果新校验和与现有校验和相同,则新校验和不会写入磁盘以最大限度地减少I / O。

    当使用该--write选项时, innochecksum会获得排他锁

    在这个例子中,crc32校验和被写入tab1.ibd

    shell> innochecksum -w crc32 ../data/test/tab1.ibd

    在这个例子中,crc32校验和被重写以替换无效crc32 校验和:

    shell> innochecksum --no-check --write crc32 ../data/test/tab1.ibd
  • --page-type-summary, -S

    显示表空间中每个页面类型的计数。用法示例:

    shell> innochecksum --page-type-summary ../data/test/tab1.ibd

    示例输出为--page-type-summary

    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
  • --page-type-dump, -D

    将表空间中每个页面的页面类型信息转储到stderrstdout用法示例:

    shell> innochecksum --page-type-dump=/tmp/a.txt ../data/test/tab1.ibd
  • --log, -l

    日志输出为innochecksum工具。必须提供日志文件名称。日志输出包含每个表空间页面的校验和值。对于未压缩的表格,还提供了LSN值。在 --log替换 --debug选项,这是早期版本中提供。用法示例:

    shell> innochecksum --log=/tmp/log.txt ../data/test/tab1.ibd

    要么:

    shell> innochecksum -l /tmp/log.txt ../data/test/tab1.ibd
  • - 选项。

    指定-从标准输入中读取选项。如果在预计“ 从标准读入 ”中-缺少选项时innochecksum将输出 innochecksum使用信息,指示“ - ”选项被省略。示例用法:

    shell> cat t1.ibd | innochecksum -

    在这个例子中,innochecksum写 crc32校验和算法 a.ibd而不改变原始 t1.ibd文件。

    shell> cat t1.ibd | innochecksum --write=crc32 - > a.ibd
在多个用户定义的表空间文件上运行innochecksum

以下示例演示如何在多个用户定义的表空间文件(文件)运行 innochecksum.ibd

“ test ” 数据库中的所有tablespace()文件 运行innochecksum: .ibd

shell> innochecksum ./data/test/*.ibd

文件名以“ t ” 开头的所有表空间文件(.ibd文件) 运行innochecksum

shell> innochecksum ./data/test/t*.ibd

目录中的所有表空间文件(文件) 运行innochecksum: .ibddata

shell> innochecksum ./data/*/*.ibd
注意

Windows操作系统不支持在多个用户定义的表空间文件上 运行innochecksum,因为Windows shell(如 cmd.exe)不支持glob模式扩展。在Windows系统上, 必须分别为每个用户定义的表空间文件运行innochecksum例如:

cmd> innochecksum.exe t1.ibd
cmd> innochecksum.exe t2.ibd
cmd> innochecksum.exe t3.ibd
在多个系统表空间文件上运行innochecksum

默认情况下,只有一个InnoDB系统表空间文件(ibdata1),但可以使用该innodb_data_file_path选项定义系统表空间的多个文件 在下面的例子中,三个文件系统表空间使用的定义 innodb_data_file_path选项: ibdata1ibdata2,和 ibdata3

shell> ./bin/mysqld --no-defaults --innodb-data-file-path="ibdata1:10M;ibdata2:10M;ibdata3:10M:autoextend"

这三个文件(ibdata1, ibdata2ibdata3)构成一个逻辑系统表空间。在构成一个逻辑系统表空间的多个文件上运行 innochecksuminnochecksum 需要-选择从标准输入读取表空间文件,这相当于连接多个文件以创建单个文件。对于上面提供的示例,将使用以下 innochecksum命令:

shell> cat ibdata* | innochecksum -

有关“ - ”选项的更多信息, 请参阅innochecksum选项信息。本文由学什么技术好翻译

在Windows操作系统上不支持在同一个表空间中的多个文件上 运行innochecksum,因为诸如cmd.exe的 Windows shell 不支持glob模式扩展。在Windows系统上, 必须为每个系统表空间文件分别运行innochecksum例如:

cmd> innochecksum.exe ibdata1
cmd> innochecksum.exe ibdata2
cmd> innochecksum.exe ibdata3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值