Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  innochecksum — Offline InnoDB File Checksum Utility

6.6.2 myisam_ftdump — 显示全文索引信息

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

innochecksum 不能用于服务器已经打开的表空间文件。对于这种文件,您应该使用CHECK TABLE来检查表空间中的表。尝试在服务器已经打开的表空间上运行innochecksum将导致Unable to lock file错误。

如果发现校验和不匹配,恢复表空间从备份中或启动服务器,然后使用mysqldump创建该表空间中的表的备份。

使用innochecksum,如下所示:

innochecksum [options] file_name

innochecksum支持以下选项。对于指向页面号的选项,数字是零起始的。

  • --help, -?

    Command-Line Format --help
    Type 布尔值
    Default Value false

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

    innochecksum --help
  • --info, -I

    Command-Line Format --info
    Type 布尔值
    Default Value false

    synonym for --help。显示命令行帮助。示例使用:

    innochecksum --info
  • --version, -V

    Command-Line Format --version
    Type 布尔值
    Default Value false

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

    innochecksum --version
  • --verbose, -v

    Command-Line Format --verbose
    Type 布尔值
    Default Value false

    详细模式;将每五秒在日志文件中打印进度指示器。在使用--log选项指定日志文件时,才能打印进度指示器。要开启详细模式,请运行:

    innochecksum --verbose

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

    innochecksum --verbose=FALSE

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

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

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

    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

    Command-Line Format --count
    Type 基础名称
    Default Value true

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

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

    Command-Line Format --start-page=#
    Type 数字
    Default Value 0

    从这个页面开始。示例使用:

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

    或:

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

    Command-Line Format --end-page=#
    Type 数字
    Default Value 0
    Minimum Value 0
    Maximum Value 18446744073709551615

    到这个页面结束。示例使用:

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

    或:

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

    Command-Line Format --page=#
    Type 整数
    Default Value 0

    只检查这个页面号。示例使用:

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

    Command-Line Format --strict-check=algorithm
    Type 枚举
    Default Value crc32
    Valid Values

    innodb

    crc32

    指定严格的校验和算法。可选项包括innodbcrc32none

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

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

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

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

    以下条件适用:

    • 如果您不指定--strict-check选项,innochecksum将对innodbcrc32none进行验证。

    • 如果您指定了none选项,只允许由none生成的校验和。

    • 如果您指定了innodb选项,只允许由innodb生成的校验和。

    • 如果您指定了crc32选项,只允许由crc32生成的校验和。

  • --no-check-n

    Command-Line Format --no-check
    Type 布尔值
    Default Value false

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

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

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

    Command-Line Format --allow-mismatches=#
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 18446744073709551615

    innochecksum终止之前允许的最大 checksum 不匹配次数。默认设置为0。如果--allow-mismatches=N,其中N>=0,则允许N次不匹配,并在N+1处终止innochecksum。设置--allow-mismatches为0时,innochecksum在第一次 checksum 不匹配处终止。

    在这个示例中,现有的innodb checksum 将被重写以设置--allow-mismatches为1。

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

    --allow-mismatches设置为1时,如果在一个文件中出现页面600的不匹配,并且在页面700上出现另一个不匹配,那么对该文件中的页面0-599和601-699进行checksum更新。由于--allow-mismatches设置为1,因此 checksum容忍了第一个不匹配,并在第二个不匹配处终止,留下页面600和700-999保持不变。

  • --write=name, -w num

    Command-Line Format --write=algorithm
    Type 枚举
    Default Value crc32
    Valid Values

    innodb

    crc32

    none

    重写校验和。使用--no-check选项时,需要同时使用--write选项。在使用--no-check选项时,innochecksum将忽略无效的校验和。您不需要指定--no-check选项,如果当前的校验和是有效的。

    使用--write选项时,需要指定算法。可能的--write选项值是:

    • innodb: 使用软件计算的校验和,使用来自InnoDB的原始算法。

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

    • none: 常量数字。

    使用--write选项可以将整个页面写入磁盘。如果新的校验和与现有校验和相同,则不会将新的校验和写入磁盘,以减少I/O。

    innochecksum在使用--write选项时将获得一个排他锁。

    在这个示例中,为tab1.ibd文件写入了一个crc32校验和:

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

    在这个示例中,将将一个crc32校验和重写以替换无效的crc32校验和:

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

    Command-Line Format --page-type-summary
    Type 布尔值
    Default Value false

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

    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

    Command-Line Format --page-type-dump=name
    Type 字符串
    Default Value [none]

    将每个表空间的页面类型信息dump到stderrstdout。示例使用:

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

    Command-Line Format --log=path
    Type 文件名称
    Default Value [none]

    innochecksum 工具的日志输出。需要提供日志文件名称。日志输出包含每个表空间页面的校验值。对于未压缩的表,LSN 值也将被提供。示例使用:

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

    或:

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

    指定 - 选项以从标准输入读取。如果在期望“从标准输入”时缺少 - 选项,innochecksum 打印使用信息,指示缺少 - 选项。示例使用:

    cat t1.ibd | innochecksum -

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

    cat t1.ibd | innochecksum --write=crc32 - > a.ibd

Running innochecksum on Multiple User-defined 表pace Files

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

在“test”数据库中运行innochecksum,对所有表空间(.ibd)文件进行检查。

innochecksum ./data/test/*.ibd

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

innochecksum ./data/test/t*.ibd

在“data”目录中的所有表空间文件(.ibd 文件)上运行innochecksum

innochecksum ./data/*/*.ibd
Note

在 Windows 操作系统上,运行innochecksum在多个自定义表空间文件上不受支持,因为 Windows shells,如cmd.exe,不支持 glob 模式扩展。在 Windows 系统上,需要单独对每个自定义表空间文件运行innochecksum,例如:

innochecksum.exe t1.ibd
innochecksum.exe t2.ibd
innochecksum.exe t3.ibd

Running innochecksum on Multiple System 表pace Files

默认情况下,只有一个InnoDB系统表空间文件(ibdata1),但可以使用innodb_data_file_path选项定义多个文件为系统表空间。在以下示例中,三个文件(ibdata1ibdata2ibdata3)使用innodb_data_file_path选项定义为系统表空间:

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

这三个文件(ibdata1ibdata2ibdata3)组成一个逻辑的系统表空间。要在多个文件中运行innochecksum,需要使用-选项从标准输入读取表空间文件,这等同于将多个文件concatenate到一个单个文件中。对于上述示例,以下innochecksum命令将被使用:

cat ibdata* | innochecksum -

请参阅innochecksum选项信息,以获取更多关于“-”选项的信息。

Note

在 Windows 操作系统上,使用innochecksum工具检查多个文件在同一个表空间中不受支持,因为 Windows shell,如cmd.exe,不支持glob模式扩展。在 Windows 系统上,innochecksum必须单独对每个系统表空间文件运行。例如:

innochecksum.exe ibdata1
innochecksum.exe ibdata2
innochecksum.exe ibdata3