innochecksum は、InnoDB
ファイルのチェックサムを出力します。 このツールは InnoDB
テーブルスペースファイルを読み取って各ページのチェックサムを計算し、計算されたチェックサムを保存されているチェックサムと比較して不一致をレポートします。不一致はページが破損していることを示します。 元は、停電後にテーブルスペースの完全性の検証を迅速化するために開発されましたが、ファイルコピーのあとにも使用できます。 チェックサムの不一致により、InnoDB
は意図的に実行中のサーバーを停止するため、本番中のサーバーで破損したページが発生するのを待つのではなく、このツールを使用することをお薦めします。
innochecksum は、サーバーがすでにオープンしているテーブルスペースファイルには使用できません。 このようなファイルに関しては、CHECK TABLE
を使用してテーブルスペース内のテーブルをチェックするとよいでしょう。 サーバーがすでにオープンしているテーブルスペースで innochecksum を実行しようとすると、「ファイルをロックできません」エラーが発生します。
チェックサムの不一致が見つかった場合は、バックアップからテーブルスペースをリストアするか、サーバーを起動し、mysqldump を使用してテーブルスペース内のテーブルのバックアップを作成します。
innochecksum は次のように起動します。
shell> innochecksum [options] file_name
innochecksum のオプション
innochecksum は次のオプションをサポートします。 ページ番号を参照するオプションについては、数字はゼロベースです。
-
コマンドラインヘルプを表示します。 使用例:
shell> innochecksum --help
-
--help
と同義です。 コマンドラインヘルプを表示します。 使用例:shell> innochecksum --info
-
バージョン情報を表示します。 使用例:
shell> innochecksum --version
-
冗長モード。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 ...
-
ファイル内のページ数を出力して終了します。 使用例:
shell> innochecksum --count ../data/test/tab1.ibd
-
このページ番号から開始します。 使用例:
shell> innochecksum --start-page=600 ../data/test/tab1.ibd
または
shell> innochecksum -s 600 ../data/test/tab1.ibd
-
このページ番号で終了します。 使用例:
shell> innochecksum --end-page=700 ../data/test/tab1.ibd
または
shell> innochecksum --p 700 ../data/test/tab1.ibd
-
このページ番号のみをチェックします。 使用例:
shell> innochecksum --page=701 ../data/test/tab1.ibd
-
厳密なチェックサムアルゴリズムを指定します。 オプションには、
innodb
、crc32
およびnone
があります。この例では、
innodb
チェックサムアルゴリズムが指定されています:shell> innochecksum --strict-check=innodb ../data/test/tab1.ibd
この例では、
crc32
チェックサムアルゴリズムが指定されています:shell> innochecksum -C crc32 ../data/test/tab1.ibd
次の条件が適用されます。
--strict-check
オプションを指定しない場合、innochecksum はinnodb
、crc32
およびnone
に対して検証を行います。none
オプションを指定すると、none
によって生成されたチェックサムのみが許可されます。innodb
オプションを指定すると、innodb
によって生成されたチェックサムのみが許可されます。crc32
オプションを指定すると、crc32
によって生成されたチェックサムのみが許可されます。
-
チェックサムを書き換えるときにチェックサム検証を無視します。 このオプションは、innochecksum
--write
オプションと一緒にのみ使用できます。--write
オプションを指定しない場合、innochecksum は終了します。この例では、
innodb
チェックサムを書き換えて、無効なチェックサムを置き換えます:shell> innochecksum --no-check --write innodb ../data/test/tab1.ibd
-
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 は変更されません。 -
チェックサムを書き換えます。 無効なチェックサムを書き換える場合は、
--no-check
オプションを--write
オプションとともに使用する必要があります。--no-check
オプションは、無効なチェックサムの検証を無視するように innochecksum に指示します。 現在のチェックサムが有効な場合は、--no-check
オプションを指定する必要はありません。--write
オプションを使用する場合は、アルゴリズムを指定する必要があります。--write
オプションに使用可能な値は次のとおりです:innodb
:InnoDB
の元のアルゴリズムを使用してソフトウェアで計算されるチェックサム。crc32
:crc32
アルゴリズムを使用して計算されるチェックサムで、ハードウェア支援を使用して実行される可能性があります。none
: 定数。
--write
オプションは、ページ全体をディスクに書き換えます。 新しいチェックサムが既存のチェックサムと同じである場合、I/O を最小化するために新しいチェックサムはディスクに書き込まれません。--write
オプションを使用すると、innochecksum は排他ロックを取得します。この例では、
tab1.ibd
のcrc32
チェックサムが書き込まれます:shell> innochecksum -w crc32 ../data/test/tab1.ibd
この例では、
crc32
チェックサムを書き換えて、無効なcrc32
チェックサムを置き換えます:shell> innochecksum --no-check --write crc32 ../data/test/tab1.ibd
-
テーブルスペース内の各ページタイプの数を表示します。 使用例:
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
-
テーブルスペース内の各ページのページタイプ情報を
stderr
またはstdout
にダンプします。 使用例:shell> innochecksum --page-type-dump=/tmp/a.txt ../data/test/tab1.ibd
-
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
オプションを使用して定義されます: ibdata1
、ibdata2
および ibdata3
。
shell> ./bin/mysqld --no-defaults --innodb-data-file-path="ibdata1:10M;ibdata2:10M;ibdata3:10M:autoextend"
3 つのファイル (ibdata1
、ibdata2
および 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