ANALYZE TABLE
構文
BACKUP TABLE
構文
CHECK TABLE
構文
CHECKSUM TABLE
構文
OPTIMIZE TABLE
構文
REPAIR TABLE
構文
RESTORE TABLE
構文
ANALYZE TABLE
構文ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name
[,tbl_name
] ...
ANALYZE TABLE
はテーブルのキーの分布を分析、格納します。分析の最中に、テーブルは MyISAM
のリード ロックを利用してロックされます。InnoDB
には、テーブルは書き込みロックでロックされます。このステートメントは MyISAM
と InnoDB
テーブルと共に機能します。MyISAM
テーブルにとっては、このステートメントは myisamchk --analyze を利用する事と同じです。
解析が InnoDB
内でどのように機能するのかという事に関する情報については、項 「InnoDB
テーブル上の制約」 を参照してください。
MySQL は、定数以外の何かに対して接合を実行した時、どの順番でテーブルが接合されるべきかを決める為に格納されたキー分布を利用します。
このステートメントはテーブルに SELECT
と INSERT
権限を要求します。
ANALYZE TABLE
は次のカラムを利用して結果セットを返します。
カラム | 値 |
Table |
テーブル名 |
Op |
いつも analyze |
Msg_type |
status 、error 、info 、または warning の1つ |
Msg_text |
メッセージ |
SHOW INDEX
ステートメントを利用して格納されたキー分布を確認する事ができます。詳しくは 項17. 「SHOW INDEX
構文」 を参照してください。
もしテーブルが前回の ANALYZE TABLE
ステートメント以降変更されていなければ、そのテーブルは再解析されません。
ANALYZE TABLE
ステートメントは、任意の NO_WRITE_TO_BINLOG
キーワード(またはそのエイリアス LOCAL
)が利用されない限り、バイナリ ログに書きこまれます。これは、複製マスタとして機能している MySQL サーバ上で利用される ANALYZE TABLE
ステートメントが、複製スレーブにデフォルトで複製される為に行われます。
BACKUP TABLE
構文BACKUP TABLEtbl_name
[,tbl_name
] ... TO '/path/to/backup/directory
'
注意:このステートメントは廃止予定です。オンライン バックアップ機能を提供する、より良い代替を準備中です。その間、mysqlhotcopy スクリプトを代わりに利用する事ができます。
BACKUP TABLE
は、バッファされた変更をディスクにフラッシュした後、テーブルを格納するのに必要な最低数のテーブル ファイルをバックアップ ディレクトリにコピーします。このステートメントは
MyISAM
テーブルにしか機能しません。それは .frm
定義と .MYD
データフ ァイルをコピーします。.MYI
インデックス ファイルは、それら2つのファイルから回復する事ができます。ディレクトリは、完全なパス名として指定されなければいけません。テーブルを復旧させるには、RESTORE TABLE
を利用してください。
バックアップの最中に、バックアップされるのに従って、各テーブルに対して1つずつリード ロックが行われます。もしいくつかのテーブルをスナップショットとしてバックアップしたければ(バックアップ操作の最中にそれらが変更されるのを防ぎながら)まずグループ内の全てのテーブルに対してリード
ロックを取得する為に、LOCK TABLES
ステートメントを発行してください。
BACKUP TABLE
は次のカラムを利用して結果セットを返します。
カラム | 値 |
Table |
テーブル名 |
Op |
いつも backup |
Msg_type |
status 、error 、info 、または warning の1つ |
Msg_text |
メッセージ |
CHECK TABLE
構文CHECK TABLEtbl_name
[,tbl_name
] ... [option
] ...option
= {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
CHECK TABLE
はテーブルのエラーを確認します。CHECK TABLE
は MyISAM
、InnoDB
、そして ARCHIVE
テーブルにのみ機能します。MySQL 5.1.9 から、CHECK
は CSV
テーブルにも有効になりました。 項13.11. 「CSV
ストレージエンジン」 を参照してください。MyISAM
テーブルに対しては、キー統計もまた更新されます。
CHECK TABLE
は、既に存在していないビュー定義内で参照されるテーブルなどのような、ビューの問題も確認できます。
CHECK TABLE
は次のカラムを利用して結果セットを返します。
カラム | 値 |
Table |
テーブル名 |
Op |
いつも check |
Msg_type |
status 、error 、info 、または warning の1つ |
Msg_text |
メッセージ |
ステートメントは各確認済テーブルにたくさんの情報行を作成する可能性がある事に注意してください。最後の行は status
の Msg_type
値を持ち、Msg_text
は通常 OK
になります。もし OK
か Table is already up to date
が得られなければ、通常はテーブルの修復を起動する必要があります。詳しくは 項 「テーブル保守とクラッシュ リカバリ」 を参照してください。Table is already up to date
は、そのテーブルのストレージ エンジンが、そのテーブルを確認する必要は無いと指示しているという意味です。
FOR UPGRADE
オプションは、名づけられたテーブルが現在の MySQL バージョンと互換性があるか確認します。このオプションは MySQL 5.1.7 で追加されました。サーバは
FOR UPGRADE
を利用し、作成された時以降、各テーブルに対してデータ タイプやインデックスに互換性の無い変更があったかどうかを確認します。もし無ければ、その確認は成功です。反対に、もし非適応性があれば、サーバはテーブルに対して総確認を行います。(少々時間がかかります。)もし総確認が成功すれば、サーバはテーブルの
.frm
ファイルに現在の MySQL バージョン番号をマークします。.frm
ファイルをマークする事で、同じバージョンのサーバによるそのテーブルの今後の確認が早くなる事が保証されます。
データタイプの格納フォーマットが変更されたか、そのソート順が変更された為に、非適合性が発生する可能性があります。私たちの目的はそれらの変更を避ける事ですが、時として各リリースの間に、非適合性よりもさらに深刻である問題を修正する事の方が大切な事もあります。
現在は、FOR UPGRADE
でこれらの非適合性が見つかっています。
MySQL 4.1 と 5.0 の間で、InnoDB
と MyISAM
テーブルの為の TEXT
カラム内の最後の空白のインデックス順が変更されました。
新しい DECIMAL
データタイプの格納方法は MySQL 5.0.3 と 5.0.5 の間に変更されました。
それ以外のチェックポイントは次のテーブルに表されています。これらのオプションは MyISAM
テーブルの確認だけに適応し、InnoDB
テーブルとビューでは無視されます。
タイプ | 意味 |
QUICK |
不正リンクの確認の為に行をスキャンしないでください。 |
FAST |
適切に閉じられていないテーブルだけを確認してください。 |
CHANGED |
最後の確認以降変更されたか、または正常に閉じられていないテーブルだけを確認してください。 |
MEDIUM |
削除されたリンクが有効である事を検証する為に行をスキャンしてください。これは行のキー チェックサムも計算し、それをキーの為に計算されたチェックサムを利用して検証します。 |
EXTENDED |
各行の全てのキーに対して総キー参照を行ってください。これはテーブルが100%整合性がある事を保証しますが、時間がかかる作業です。 |
もし QUICK
、MEDIUM
、または EXTENDED
のどのオプションも指定されなければ、動的フォーマットである MyISAM
テーブルのデフォルトの確認タイプは MEDIUM
になります。これは、テーブル上で myisamchk --medium-check tbl_name
を起動させるのと同じ結果になります。CHANGED
か FAST
が指定されない限り、静的フォーマットの MyISAM
テーブルのデフォルトの確認タイプは、MEDIUM
です。その場合、デフォルトは QUICK
です。行はめったに破壊されないので、CHANGED
と FAST
の行スキャンは省かれます。
テーブルが正しく閉じられているかどうかの確認の為に簡単なチェックを行っている次の例のように、確認オプションを組み合わせる事も可能です。
CHECK TABLE test_table FAST QUICK;
注意:場合によっては CHECK TABLE
でテーブルが変更されます。これは、テーブルが 「corrupted」 や 「not closed properly」 と印されているにも関わらず、CHECK TABLE
がそのテーブル内に何の問題も発見できない時に起こります。この場合、CHECK TABLE
はテーブルに OK の印をつけます。
もしテーブルが破損すると、その問題はデータ部分ではなく、ほとんどインデックス内にあるでしょう。これまでに紹介された全ての確認タイプはインデックスをくまなく確認するので、ほとんどのエラーを見つける事ができるはずです。
もし OK であると思われるテーブルを確認したければ、確認オプションは利用しない、または利用するのであれば QUICK
オプションを利用しなければいけません。急いでいる為、QUICK
がデータ ファイル中に何のエラーも発見しないかもしれないという小さいリスクを負う事ができる場合には、後者を利用してください。(ほとんどの場合、通常の利用条件下であれば、MySQL
はデータ ファイル中に何らかのエラーを発見するはずです。その場合、そのテーブルは 「corrupted」 と印が付けられ、修復されるまでは利用できなくなります。)
FAST
と CHANGED
は、テーブルを頻繁に確認したい場合に、スクリプト(例えば、cron から実行されるように)から利用されるようになっています。ほとんどの場合、FAST
は CHANGED
より好まれます。(MyISAM
コード内にバグを見つけた可能性がある場合のみ、この方法は好ましくありません。)
通常確認を起動した後で、MySQL が行を更新したりキーで行を見つけたりする時に、テーブルから変なエラーが発生する場合のみEXTENDED
が利用されます。これは通常確認が成功した場合は、めったに起こらないでしょう。
CHECK TABLE
によって報告されたいくつかの問題は自動的に修復されません。
Found row where the auto_increment column has the value 0
.
これは、 AUTO_INCREMENT
インデックス カラムが0の値を含むテーブル内に行を持っている事を意味します。(UPDATE
ステートメントを利用して、カラムを明示的に 0 に設定する事で、AUTO_INCREMENT
カラムが 0 である行を作成する事が可能です。)
これ自体はエラーではないのですが、このテーブルを一度ダンプしそれを復旧させる、またはテーブル上に ALTER TABLE
を実行する事を決めた時に問題を引き起こします。この場合、AUTO_INCREMENT
カラムは、複製キー エラーのような問題を引き起こす可能性がある AUTO_INCREMENT
カラムのルールに従って値を変更します。
警告を除去するには、カラム値を0以外の値に設定する為に UPDATE
ステートメントを実行してください。
CHECKSUM TABLE
構文CHECKSUM TABLEtbl_name
[,tbl_name
] ... [ QUICK | EXTENDED ]
CHECKSUM TABLE
はテーブル チェックサムを報告します。
QUICK
を利用すると、ライブ テーブル チェックサムが有効であればそれが報告され、有効でなければ NULL
を利用できます。これはとても速いです。ライブ チェックサムは、テーブルを作成した時に CHECKSUM=1
テーブル オプションを指定する事によって有効になります。これは現在は MyISAM
テーブルにだけサポートされています。詳しくは 項 「CREATE TABLE
構文」 を参照してください。
EXTENDED
を利用すると、テーブル全体が一行ごとに読まれ、チェックサムが計算されます。 大きいテーブルでは時間がかかります。
もし QUICK
と EXTENDED
のどちらも指定されない場合、テーブル ストレージ エンジンがライブ チェックサムをサポートし、またそうでない場合にはテーブルをスキャンするのであれば、MySQL
がライブ チェックサムを返します。
存在しないテーブルに対しては、CHECKSUM TABLE
は NULL
を返し、警告を生成します。
チェックサムの値はテーブル行フォーマットによって決まります。もし行フォーマットが変更されれば、チェックサムもまた変更されます。例えば、VARCHAR
の格納フォーマットは MySQL 4.1 と 5.0 の間に変更されたので、もし4.1のテーブルが MySQL 5.0 にアップグレードされると、チェックサム値も変更されるでしょう。
OPTIMIZE TABLE
構文OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name
[,tbl_name
] ...
もしテーブルの大部分を削除したり、変数長行で何箇所もテーブルを変更した場合は(VARCHAR
、VARBINARY
、BLOB
、または TEXT
カラムを持つテーブル)、OPTIMIZE TABLE
を利用しなければいけません。
削除された行はリンクされたリスト内で保存され、後続の INSERT
操作は古い行の位置を再利用します。使用されていないスペースの再要求をし、データ ファイルをデフラグするには OPTIMIZE TABLE
を利用する事ができます。
このステートメントはテーブルに SELECT
と INSERT
権限を要求します。
ほとんどの設定で、OPTIMIZE TABLE
を利用する必要は全くありません。可変長行の更新を頻繁にするとしても、特定のテーブルに対してだけ、この作業を週に一度、または月に一度以上する必要はありません。
OPTIMIZE TABLE
は MyISAM
と InnoDB
テーブルに対して のみ 機能します。これは、NDB
ディスク データ テーブルを含むその他のストレージ エンジンを利用して作成されたテーブルには機能 しません。
MyISAM
テーブルに対しては、OPTIMIZE TABLE
は次のように機能します。
もしテーブルが行を削除したり分割したりすると、テーブルを修復します。
もしインデックス ページがソートされていなければ、それらをソートします。
もしテーブルの統計が最新でなければ、(そしてインデックスをソートする事で修復が完了されなければ)それらを更新します。
InnoDB
テーブルに対しては、 インデックス統計とクラスタされたインデックス内の使用されていないフリー スペースを更新する為にテーブルを復元する ALTER TABLE
に OPTIMIZE TABLE
がマップされます。
--skip-new
か --safe-mode
オプションを利用して mysqld をスタートさせる事で、OPTIMIZE TABLE
が別のストレージ エンジン上で機能させる事ができます。この場合、OPTIMIZE TABLE
は単に ALTER TABLE
にマップされます。
OPTIMIZE TABLE
は次のカラムを利用して結果セットを返します。
カラム | 値 |
Table |
テーブル名 |
Op |
いつも optimize |
Msg_type |
status 、error 、info 、または warning の1つ |
Msg_text |
メッセージ |
MySQL は OPTIMIZE TABLE
が起動している最中にテーブルをロックするという事に注意してください。
OPTIMIZE TABLE
ステートメントは、任意の NO_WRITE_TO_BINLOG
キーワード(またはそのエイリアス LOCAL
)が利用されない限り、バイナリ ログに書きこまれます。これは、複製マスタとして機能している MySQL サーバ上で利用される OPTIMIZE TABLE
ステートメントが、複製スレーブにデフォルトで複製される為に行われます。
OPTIMIZE TABLE
は、POINT
カラム上の空間インデックスのような、R-tree インデックスをソートしません。(バグ #23578)
REPAIR TABLE
構文REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name
[,tbl_name
] ... [QUICK] [EXTENDED] [USE_FRM]
REPAIR TABLE
は破損された可能性があるテーブルを修復します。これはデフォルトで、myisamchk --recover tbl_name
と同じ効果を持っています。REPAIR TABLE
は MyISAM
と ARCHIVE
テーブルに対して機能します。MySQL 5.1.9 から、REPAIR
は CSV
テーブルにも有効になりました。 項13.4. 「MyISAM
ストレージエンジン」、項13.10. 「ARCHIVE
ストレージエンジン」、そして 項13.11. 「CSV
ストレージエンジン」 を参照してください。
このステートメントはテーブルに SELECT
と INSERT
権限を要求します。
通常は、このステートメントは一度も実行する必要はありません。しかし、もし大変な失敗をしてしまった時は REPAIR TABLE
を利用すると全てのデータを MyISAM
テーブルから取り戻す事ができます。もしテーブルが頻繁に破損する場合は、REPAIR TABLE
を利用する必要性を減らす為にその原因を見つける努力が必要です。項B. 「What to Do If MySQL Keeps Crashing」 と 項 「MyISAM
テーブルの問題点」 を参照して下さい。
警告:もし REPAIR TABLE
操作の最中にサーバが停止してしまったら、再起動した直後に、他の操作をする前にすぐにもう一度 REPAIR TABLE
ステートメントを実行しなければいけません。(バックアップを作成してスタートさせるのが良いでしょう。)最悪の場合、データ ファイルの情報を何も持たない新しい綺麗なインデックス
ファイルを得て、その次に行う操作によってデータ ファイルが上書きされてしまう事もあるでしょう。実際に起こる可能性は低い事ですが、起こり得るシナリオです。
REPAIR TABLE
は次のカラムを利用して結果セットを返します。
カラム | 値 |
Table |
テーブル名 |
Op |
いつも repair |
Msg_type |
status 、error 、info 、または warning の1つ |
Msg_text |
メッセージ |
REPAIR TABLE
ステートメントは各修復済テーブルにたくさんの情報行を作成する可能性があります。最後の行は status
と Msg_test
の Msg_type
値を持ち、Msg_text
は通常 OK
になります。もし OK
ではなかったら、myisamchk --safe-recover を利用してテーブルを修復してみる必要があります。(REPAIR TABLE
は myisamchk の全てのオプションをまだインプリメントしていません。)myisamchk --safe-recover を利用すると、--max-record-length
のような REPAIR TABLE
がサポートしていないオプションを利用する事ができます。
もし QUICK
が与えられたら、REPAIR TABLE
はインデックス ツリーのみを修復しようと試みます。このタイプの修正は myisamchk --recover --quick によって行われた物と似ています。
もし EXTENDED
を利用すると、MySQL は1つのインデックスをソートしながら一度に作成する代わりに、1つの行ごとに作成します。このタイプの修正は myisamchk --recover --quick によって行われた物と似ています。
REPAIR TABLE
に有効な USE_FRM
モードもあります。もし .MYI
インデックス ファイルがなくなっていたり、そのヘッダが破損していたらこれを利用してください。このモードでは、MySQL は .frm
ファイルからの情報を利用して .MYI
ファイルを再作成します。この種類の修復は myisamchk ではできません。注意:このモードは、通常の REPAIR
モードを利用できない時 のみ 利用してください。.MYI
ヘッダは REPAIR ... USE_FRM
内で失われた重要なテーブル メタデータ(具体的には、現在の AUTO_INCREMENT
値と Delete link
)を含んでいます。この情報は .MYI
ファイル内にも格納されているので、テーブルが圧縮された時には USE_FRM
を利用しないでください。
REPAIR TABLE
ステートメントは、任意の NO_WRITE_TO_BINLOG
キーワード(またはそのエイリアス LOCAL
)が利用されない限り、バイナリ ログに書きこまれます。これは、複製マスタとして機能している MySQL サーバ上で利用される REPAIR TABLE
ステートメントが、複製スレーブにデフォルトで複製される為に行われます。
RESTORE TABLE
構文RESTORE TABLEtbl_name
[,tbl_name
] ... FROM '/path/to/backup/directory
'
RESTORE TABLE
は BACKUP TABLE
で作成されたバックアップからテーブルを復旧します。ディレクトリは、完全なパス名として指定されなければいけません。
既存テーブルは上書きされません。もしそのようなテーブルを修復させようとするとエラーが発生します。BACKUP TABLE
と同じで、RESTORE TABLE
は現在 MyISAM
テーブルにしか機能しません。修復されたテーブルはマスタからスレーブに複製されません。
各テーブルのバックアップは、その .frm
フォーマット ファイルと .MYD
データ ファイルで構成されています。修復操作はそれらのファイルを修復し、そして .MYI
インデックス ファイルを再構築する為にそれらを利用します。修復操作は、インデックスを再構築する必要がある為、バックアップ作業よりも時間がかかります。テーブルが長いインデックスを持っていれば、その分時間も長くかかります。
RESTORE TABLE
は次のカラムを利用して結果セットを返します。
カラム | 値 |
Table |
テーブル名 |
Op |
いつも restore |
Msg_type |
status 、error 、info 、または warning の1つ |
Msg_text |
メッセージ |