MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  innochecksum — オフライン InnoDB ファイルチェックサムユーティリティー

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

    冗長モード。5 秒ごとに進行状況インジケータをログファイルに出力します。 進捗インジケータを出力するには、--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 オプションを指定しない場合、innochecksuminnodbcrc32 および none に対して検証を行います。

    • 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 です。 N>=0 を含む --allow-mismatches= N の場合、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 に設定すると、1000 ページのファイルで 600 ページ目と 700 ページ目に不一致がある場合、0-599 ページと 601-699 ページ目のチェックサムが更新されます。 --allow-mismatches が 1 に設定されているため、チェックサムは最初の不一致を許容し、2 番目の不一致で終了します。ページ 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 は排他ロックを取得します。

    この例では、tab1.ibdcrc32 チェックサムが書き込まれます:

    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

    テーブルスペース内の各ページのページタイプ情報を stderr または stdout にダンプします。 使用例:

    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 は、元の t1.ibd ファイルを変更せずに crc32 チェックサムアルゴリズムを a.ibd に書き込みます。

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

複数のユーザー定義テーブルスペースファイルに対する innochecksum の実行

次の例は、複数のユーザー定義テーブルスペースファイル (.ibd ファイル) で innochecksum を実行する方法を示しています。

test データベース内のすべてのテーブルスペース (.ibd) ファイルに対して innochecksum を実行します:

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

t で始まるファイル名を持つすべてのテーブルスペースファイル (.ibd ファイル) に対して innochecksum を実行します:

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

data ディレクトリ内のすべてのテーブルスペースファイル (.ibd ファイル) に対して innochecksum を実行します:

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

cmd.exe などの Windows シェルは glob パターン展開をサポートしていないため、複数のユーザー定義テーブルスペースファイルでの innochecksum の実行は Windows オペレーティングシステムではサポートされていません。 Windows システムでは、ユーザー定義のテーブルスペースファイルごとに innochecksum を個別に実行する必要があります。 例:

cmd> innochecksum.exe t1.ibd
cmd> innochecksum.exe t2.ibd
cmd> innochecksum.exe t3.ibd

複数のシステムテーブルスペースファイルに対する innochecksum の実行

デフォルトでは、InnoDB システムテーブルスペースファイル (ibdata1) は 1 つのみですが、innodb_data_file_path オプションを使用してシステムテーブルスペースに複数のファイルを定義できます。 次の例では、system テーブルスペースの 3 つのファイルが innodb_data_file_path オプションを使用して定義されます: ibdata1ibdata2 および ibdata3

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

3 つのファイル (ibdata1ibdata2 および ibdata3) は、1 つの論理システムテーブルスペースを形成します。 単一の論理システムテーブルスペースを形成する複数のファイルに対して innochecksum を実行するには、innochecksum に、標準入力からテーブルスペースファイルを読み取るための - オプションが必要です。これは、複数のファイルを連結して単一のファイルを作成することと同等です。 前述の例では、次の innochecksum コマンドが使用されます:

shell> cat ibdata* | innochecksum -

- オプションの詳細は、innochecksum オプションの情報を参照してください。

注記

同じテーブルスペース内の複数のファイルでの innochecksum の実行は、Windows オペレーティングシステムではサポートされていません。これは、cmd.exe などの Windows シェルは glob パターン展開をサポートしていないためです。 Windows システムでは、innochecksum はシステムテーブルスペースファイルごとに個別に実行する必要があります。 例:

cmd> innochecksum.exe ibdata1
cmd> innochecksum.exe ibdata2
cmd> innochecksum.exe ibdata3

関連キーワード:  innochecksum, page, テーブル, shell, スペース, 実行, サーバー, ページ, プログラム, 表示