mysqlcheck クライアントでは、テーブルの保守 (テーブルの検査、修復、最適化、分析) を実行します。
各テーブルは処理中にロックされるため、ほかのセッションでは利用できません。ただし、検査操作ではテーブルは READ
ロックでのみロックされます (READ
ロックおよび WRITE
ロックの詳細は、セクション13.3.5「LOCK TABLES および UNLOCK TABLES 構文」を参照してください)。テーブルの保守処理は、特に大きなテーブルでは長い時間を要する可能性があります。--databases
オプションまたは --all-databases
オプションを使用して 1 つまたは複数のデータベースに含まれるすべてのテーブルを処理する場合は、mysqlcheck の呼び出しに長い時間がかかる可能性があります。(mysql_upgrade についても同じことが言えますが、これはこのプログラムが mysqlcheck を呼び出してすべてのテーブルを検査し、必要に応じて修復するからです。)
mysqlcheck の機能は myisamchk と同様ですが、作動方法が異なります。主な作動方法の違いは、mysqlcheck は mysqld サーバーが稼働中のときに使用されなければならないのに対し、myisamchk はこのサーバーが稼働していないときに使用されるべきであるという点です。mysqlcheck を使用することの利点は、テーブルの保守を行うためにサーバーを停止する必要がないことです。
mysqlcheck は SQL ステートメント CHECK TABLE
、REPAIR TABLE
、ANALYZE TABLE
、および OPTIMIZE TABLE
をユーザーにとって便利な方法で使用します。実行する操作に対してどのステートメントを使用するか決定し、実行のためサーバーにステートメントを送信します。各ステートメントがどのストレージエンジンと機能するかは、セクション13.7.2「テーブル保守ステートメント」のステートメントの説明を参照してください。
MyISAM
ストレージエンジンでは 4 つの保守処理をすべてサポートしているため、mysqlcheck を使用すると、MyISAM
テーブルに対してそれらのどの保守処理も実行できます。ほかのストレージエンジンは必ずしもすべての操作をサポートしているとはかぎりません。そのような場合、エラーメッセージが表示されます。たとえば、test.t
が MEMORY
テーブルの場合、検査しようとすると次の結果が生成されます。
shell> mysqlcheck test t
test.t
note : The storage engine for the table doesn't support check
mysqlcheck がテーブルを修復できない場合、手動でテーブルを修復する方法についてはセクション2.11.4「テーブルまたはインデックスの再作成または修復」を参照してください。たとえば、InnoDB
テーブルがこれに当たります。このテーブルは CHECK TABLE
で検査できますが、REPAIR TABLE
で修復はできません。
テーブルの修復操作を実行する前に、テーブルのバックアップを作成することをお勧めします。状況によっては、この操作のためにデータ損失が発生することがあります。考えられる原因としては、ファイルシステムのエラーなどがありますがこれに限りません。
一般的に、mysqlcheck を起動するには 3 つの方法があります。
shell> mysqlcheck [options] db_name [tbl_name ...]
shell> mysqlcheck [options] --databases db_name ...
shell> mysqlcheck [options] --all-databases
db_name
のあとにテーブルを指定しない場合、または--databases
オプションまたは --all-databases
オプションを使用している場合、データベース全体が検査されます。
ほかのクライアントプログラムに比べ、mysqlcheck は特別な機能があります。テーブル検査のデフォルト動作 (--check
) はバイナリの名前を変更することで変えられます。テーブルをデフォルトで修復するツールが必要な場合、mysqlrepair という名前で mysqlcheck のコピーを作成するか、mysqlrepair という名前で mysqlcheck へのシンボリックリンクを作成してください。mysqlrepair を起動すれば、テーブルが修復されます。
次の表に示す名前は、mysqlcheck のデフォルト動作を変更するために使用できます。
コマンド | 意味 |
---|---|
mysqlrepair | デフォルトオプションは --repair
|
mysqlanalyze | デフォルトオプションは --analyze
|
mysqloptimize | デフォルトオプションは --optimize
|
mysqlcheck は次のオプションをサポートします。これらはコマンド行またはオプションファイルの [mysqlcheck]
グループおよび [client]
グループで指定できます。MySQL プログラムによって使用されるオプションファイルの詳細については、セクション4.2.6「オプションファイルの使用」を参照してください。
表 4.7 mysqlcheck のオプション
オプション名 | 説明 | 導入 |
---|---|---|
--all-databases | データベース内のテーブルをすべて確認 | |
--all-in-1 | 各データベースに対して、そのデータベースのすべてのテーブルを指定する単一のステートメントを実行 | |
--analyze | テーブルを分析 | |
--auto-repair | 確認されたテーブルが破損していた場合、自動的に修復 | |
--bind-address | 指定されたネットワークインタフェースを使用して MySQL サーバーに接続 | 5.6.1 |
--character-sets-dir | 文字セットがインストールされているディレクトリ | |
--check | テーブルにエラーがないか確認 | |
--check-only-changed | 最後に行われた検査以降に変更されたテーブルのみをチェック | |
--check-upgrade | CHECK TABLE を FOR UPGRADE オプションで呼び出し | |
--compress | クライアントとサーバー間で送信される情報をすべて圧縮 | |
--databases | 指定されたデータベース内のテーブルをすべて処理 | |
--debug | デバッグのログを書き込み | |
--debug-check | プログラムの終了時にデバッグ情報を出力 | |
--debug-info | プログラムの終了時に、デバッグ情報、メモリー、および CPU の統計を出力 | |
--default-auth | 使用する認証プラグイン | 5.6.2 |
--default-character-set | デフォルト文字セットを指定 | |
--defaults-extra-file | 通常のオプションファイルに加えてオプションファイルを読み取る | |
--defaults-file | 指名されたオプションファイルのみを読み取る | |
--defaults-group-suffix | オプショングループのサフィクス値 | |
--extended | テーブルをチェックして修復 | |
--fast | 正しく閉じられていないテーブルのみを確認 | |
--fix-db-names | データベース名を 5.1 形式に変換 | |
--fix-table-names | テーブル名を 5.1 形式に変換 | |
--force | SQL エラーが発生しても続行 | |
--help | ヘルプメッセージを表示して終了 | |
--host | 指定されたホスト上で MySQL サーバーに接続 | |
--login-path | ログインパスオプションを .mylogin.cnf から読み取り | 5.6.6 |
--medium-check | --extended 操作よりも速いチェックを実行 | |
--no-defaults | オプションファイルを読み取らない | |
--optimize | テーブルを最適化 | |
--password | サーバーに接続する際に使用するパスワード | |
--pipe | Windows で、名前付きパイプを使用してサーバーに接続 | |
--plugin-dir | プラグインがインストールされているディレクトリ | 5.6.2 |
--port | 接続に使用する TCP/IP ポート番号 | |
--print-defaults | デフォルトを出力 | |
--protocol | 使用する接続プロトコル | |
--quick | 最速のチェック方法 | |
--repair | 一意ではではない一意なキー以外のほぼすべてを修正できる修復を実行 | |
--secure-auth | 古い (4.1.1 より前の) 形式でサーバーにパスワードを送信しない | 5.6.17 |
--shared-memory-base-name | 共有メモリー接続に使用する共有メモリーの名前 | |
--silent | サイレントモード | |
--skip-database | 実行される操作からこのデータベースを除外 | 5.6.11 |
--socket | ローカルホストへの接続で、使用する Unix ソケットファイル | |
--ssl | 接続に SSL を有効化 | |
--ssl-ca | 信頼された SSL CA のリストを含むファイルのパス | |
--ssl-capath | 信頼された SSL CA の PEM 形式の証明書を含むディレクトリのパス | |
--ssl-cert | PEM 形式の X509 証明書を含むファイルのパス | |
--ssl-cipher | SSL の暗号化に使用される、許可された暗号のリスト | |
--ssl-crl | 証明書失効リストを含むファイルのパス | 5.6.3 |
--ssl-crlpath | 証明書失効リストファイルを含むディレクトリのパス | 5.6.3 |
--ssl-key | PEM 形式の X509 鍵を含むファイルのパス | |
--ssl-verify-server-cert | サーバーへの接続時に、サーバーの証明書内のコモンネーム値をホスト名に対して検証 | |
--tables | --databases オプションまたは -B オプションをオーバーライド | |
--use-frm | MyISAM テーブルの修復操作用 | |
--user | サーバーへの接続時に使用する MySQL ユーザー名 | |
--verbose | 冗長モード | |
--version | バージョン情報を表示して終了 | |
--write-binlog | ANALYZE ステートメント、OPTIMIZE ステートメント、REPAIR ステートメントをバイナリログに記録。--skip-write-binlog は、NO_WRITE_TO_BINLOG をこれらのステートメントに追加します。 |
-
ヘルプメッセージを表示して終了します。
-
データベース内のテーブルをすべて検査します。これは、
INFORMATION_SCHEMA
データベースおよびperformace_schema
データベースがダンプされない点を除き、l--databases
オプションを使用してコマンド行にすべてのデータベースを指定するのと同じです。これらは、--databases
オプションで明示的に指名することでダンプできます。 -
各テーブルに対してステートメントを発行する代わりに、各データベースに対して、そのデータベースから処理されるすべてのテーブルを指名する単一のステートメントを実行します。
-
テーブルを分析します。
-
確認されたテーブルが壊れていた場合、自動的に修復します。必要な修復はすべてのテーブルが確認されたあとに実行されます。
-
複数のネットワークインタフェースを持つコンピュータで、このオプションを使用して、MySQL サーバーへの接続に使用するインタフェースを選択します。
このオプションは MySQL 5.6.1 からサポートされています。
-
文字セットがインストールされているディレクトリ。セクション10.5「文字セットの構成」を参照してください。
-
テーブルにエラーがないか確認します。これはデフォルトの動作です。
-
最後に行われた検査以降に変更されたテーブル、または適切に閉じられなかったテーブルのみを検査します。
-
CHECK TABLE
をFOR UPGRADE
オプションで呼び出し、サーバーの現在のバージョンとの互換性のないテーブルがあるか検査します。このオプションにより、--fix-db-names
オプションおよび--fix-table-names
オプションが自動的に有効になります。 -
クライアントとサーバーの両方が圧縮をサポートしている場合、その間で送受信される情報をすべて圧縮します。
-
指定されたデータベース内のテーブルをすべて処理します。通常、mysqlcheck はコマンド行の最初の名前引数をデータベース名として、それに続く名前をテーブル名として処理します。このオプションを使用すると、名前引数をすべてデータベース名として処理します。
このオプションは、
INFORMATION_SCHEMA
データベースおよびperformace_schema
データベースのダンプに使用できます。これらは通常、--all-databases
オプションを指定してもダンプされません。(--skip-lock-tables
オプションも使用してください。) -
--debug[=
,debug_options
]-# [
debug_options
]デバッグのログを書き込みます。一般的な
debug_options
文字列はd:t:o,
です。デフォルトはfile_name
d:t:o
です。 -
プログラムの終了時に、デバッグ情報を出力します。
-
プログラムの終了時に、デバッグ情報とメモリーおよび CPU 使用率の統計を出力します。
-
--default-character-set=
charset_name
charset_name
をデフォルト文字セットとして使用します。セクション10.5「文字セットの構成」を参照してください。 -
--defaults-extra-file=
file_name
このオプションファイルは、グローバルオプションファイルのあとに読み取りますが、(UNIX では) ユーザーオプションファイルの前に読み取るようにしてください。ファイルが存在しないかアクセスできない場合、エラーが発生します。
file_name
は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。 -
指定されたオプションファイルのみ使用します。ファイルが存在しないかアクセスできない場合、エラーが発生します。
file_name
は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。 -
通常のオプショングループだけでなく、通常の名前に
str
のサフィクスが付いたグループも読み取ります。たとえば、mysqlcheck は通常[client]
グループおよび[mysqlcheck]
グループを読み取ります。--defaults-group-suffix=_other
オプションを指定した場合、mysqlcheck は[client_other]
グループおよび[mysqlcheck_other]
グループも読み取ります。 -
テーブルの検査にこのオプションを使用している場合、100% 整合性があることが保証されますが、時間がかかります。
このオプションを使用してテーブルを修復している場合、修復作業に時間がかかるだけでなく、大量のガベージ行を生成することもあります。
-
使用するクライアント側の認証プラグイン。セクション6.3.7「プラガブル認証」を参照してください。
このオプションは MySQL 5.6.2 で追加されました。
-
正しく閉じられていないテーブルのみを検査します。
-
データベース名を 5.1 形式に変換します。特殊文字を含むデータベース名のみ影響を受けます。
-
テーブル名を 5.1 形式に変換します。特殊文字を含むテーブル名のみ影響を受けます。このオプションはビューにも適用されます。
-
SQL エラーが発生しても続行します。
-
--host=
,host_name
-h
host_name
指定されたホストの MySQL サーバーに接続します。
-
指名されたログインパスから
.mylogin.cnf
ログインファイルのオプションを読み取ります。「ログインパス」は、host
、user
、およびpassword
という限定されたオプションのセットのみを許可するオプショングループです。ログインパスは、サーバーホストおよびそのサーバーで認証するための認証情報を示す値のセットであると考えてください。ログインパスファイルを作成するには、mysql_config_editor ユーティリティーを使用します。セクション4.6.6「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください。このオプションは MySQL 5.6.6 で追加されました。 -
--extended
操作よりも高速な検査を実行します。これはすべてのエラーの 99.99% のみを確認し、ほとんどの場合はこれで十分でしょう。 -
オプションファイルを読み取りません。オプションファイルから不明のオプションを読み取ることが原因でプログラムの起動に失敗する場合、
--no-defaults
を使用して、オプションを読み取らないようにできます。例外として、
.mylogin.cnf
ファイルは、存在する場合はすべての場合に読み取られます。これにより、--no-defaults
が使用された場合にも、コマンド行よりも安全な方法でパスワードを指定できます。(.mylogin.cnf
は mysql_config_editor ユーティリティーによって作成されます。セクション4.6.6「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください)。 -
テーブルを最適化します。
-
--password[=
,password
]-p[
password
]サーバーに接続する際に使用するパスワードです。短いオプション形式 (
-p
) を使用した場合は、オプションとパスワードの間にスペースを置くことはできません。コマンド行で、--password
オプションまたは-p
オプションに続けてpassword
の値を指定しなかった場合、mysqlcheck はそれを要求します。コマンド行でのパスワード指定は、セキュアでないと考えるべきです。セクション6.1.2.1「パスワードセキュリティーのためのエンドユーザーガイドライン」を参照してください。オプションファイルを使用すれば、コマンド行でパスワードを指定することを回避できます。
-
Windows で、名前付きパイプを使用してサーバーに接続します。このオプションは、サーバーが名前付きパイプ接続をサポートしている場合にのみ適用されます。
-
プラグインを検索するディレクトリ。
--default-auth
オプションを使用して認証プラグインを指定したが、mysqlcheck がそれを検出できない場合は、このオプションを指定しなければならない可能性があります。セクション6.3.7「プラガブル認証」を参照してください。このオプションは MySQL 5.6.2 で追加されました。
-
接続に使用する TCP/IP ポート番号。
-
プログラム名と、オプションファイルから受け取るすべてのオプションを出力します。
-
--protocol={TCP|SOCKET|PIPE|MEMORY}
サーバーへの接続に使用する接続プロトコル。このオプションは、ほかの接続パラメータによって、必要なプロトコル以外のものが通常使用される場合に役立ちます。許可される値の詳細は、セクション4.2.2「MySQL サーバーへの接続」を参照してください。
-
このオプションを使用してテーブルを検査している場合、正しくないリンクを検査するために行のスキャンを行いません。これが最速の検査方法です。
このオプションを使用してテーブルを修復している場合、インデックスツリーのみの修復を試みます。これが最速の修復方法です。
-
一意ではないユニークキー以外のすべてを修正できる修復を実行します。
-
古い (4.1 より前の) 形式でサーバーにパスワードを送信しません。これにより、新しいパスワード形式を使用するサーバー以外への接続を防ぎます。このオプションはデフォルトで有効です。無効にするには
--skip-secure-auth
を使用します。このオプションは MySQL 5.6.17 で追加されました。注記4.1 より前のハッシュ方式を使用するパスワードはネイティブのパスワードハッシュ方式を使用するパスワードよりもセキュアでないため、使用しないようにしてください。4.1 よりも前のパスワードは非推奨であり、これらのサポートは今後の MySQL リリースで削除される予定です。アカウントのアップグレード手順については、セクション6.3.8.3「4.1 よりも前のパスワードハッシュ方式と mysql_old_password プラグインからの移行」を参照してください。
-
--shared-memory-base-name=
name
Windows で、共有メモリーを使用して作成されるローカルサーバーへの接続の共有メモリー名。デフォルト値は
MYSQL
です。共有メモリー名では大文字と小文字を区別します。共有メモリー接続を可能にするには、サーバーは
--shared-memory
オプションで起動する必要があります。 -
サイレントモード。エラーメッセージのみを出力します。
-
指名されたデータベース (大文字小文字は区別されます) を、mysqlcheck が実行する操作に含めません。このオプションは MySQL 5.6.11 で追加されました。
-
localhost
への接続用に使用する、Unix ソケットファイル、または Windows では使用する名前付きパイプの名前。 -
--ssl
で始まるオプションは、SSL を使用してサーバーに接続するかどうかを指定し、SSL 鍵および証明書を検索する場所を指定します。セクション6.3.10.4「SSL コマンドのオプション」を参照してください。 -
--databases
オプションまたは-B
オプションをおオーバーライドします。オプションに続くすべての名前引数はテーブル名とみなされます。 -
MyISAM
テーブルの修復操作で、.frm
ファイルからテーブル構造を取得することで.MYI
ヘッダーが壊れていてもテーブルが修復できます。 -
--user=
,user_name
-u
user_name
サーバーへの接続時に使用する MySQL ユーザー名。
-
冗長モード。プログラム処理のさまざまな段階についての情報を出力します。
-
バージョン情報を表示して終了します。
-
このオプションはデフォルトで有効で、mysqlcheck によって生成される
ANALYZE TABLE
、OPTIMIZE TABLE
、およびREPAIR TABLE
の各ステートメントがバイナリログに書き込まれます。--skip-write-binlog
を使用すると、ステートメントにNO_WRITE_TO_BINLOG
が追加され、ログに記録されなくなります。これらのステートメントがレプリケーションスレーブに送信されるべきではない場合またはバイナリログをバックアップからのリカバリに使用している場合には、--skip-write-binlog
を使用します。