
MyISAMは、メイン(つまり、InnoDBとともに)MySQL DBMSのデータストレージシステムの1つです。 同時に、MyISAMテーブルは非常に簡単に破損します-これに問題はありません。 すべての損傷を排除することはより困難ですが、これは非常に迅速に行うこともできます。 この記事では、myisamchkを使用して問題を解決し、MyISAMの問題を特定して修正する方法について説明します。
MySQLでテーブルを作成すると、3つの異なるファイルが作成されることはよく知られています。* .frm-テーブル形式、* .MYD(MyData)-データストレージ、* .MYI(MyIndex)-インデックス。 大規模なデータベースでは、InnoDBを使用する必要があります。これは、Oracleおよび対応する機能とある程度の類似性があるためです。
エラーを示す例として、これを使用します。
undef error - DBD::mysql::db selectrow_array failed: Table 'attach_data' is marked as crashed and should be repaired [for Statement "SELECT LENGTH(thedata) FROM attach_data WHERE id = ?"] at Bugzilla/Attachment.pm line 344 Bugzilla::Attachment::datasize('Bugzilla::Attachment=HASH(0x9df119c)') called
attach_dataテーブルが破損しており、修正する必要があることは明らかです。 myisamchkを使用してテーブルを修正します。
1. myisamchkを使用して、破損したすべてのテーブルを定義します
一時ファイルでmyisamchkの出力を指定すると、破損したテーブルの名前のみが表示されます。 ただし、ファイル/tmp/myisamchk_log.txtでは、無傷のテーブルの名前を含む、より多くのデータが示されます。
Checking MyISAM file: user_group_map.MYI Data records: 182 Deleted blocks: 0 - check file-size - check record delete-chain - check key delete-chain - check index reference - check data record references index: 1
2. myisamchkを使用して破損したテーブルを修正する
これを行うには、以下に示すように-rオプションを付けてmyisamchkを使用します。
エラーメッセージがここに表示される場合があります。クライアントがテーブルを使用している、またはテーブルが適切に閉じられていない場合、アプリケーションまたは他のテーブルでテーブルが使用されている場合。 このエラーを回避するには、テーブルの修正を開始する前にmysqldを完了することをお勧めします。 ここでFLUSH TABLESを使用できます。
3. MySQLデータベース全体に対してチェックと修正を実行します
-s:エラーのみを出力します。 double -s -sを使用して、モードを可能な限り静かにすることができます。
-f:-rオプションを使用してmyisamchkを自動的に再起動します。エラーが検出されます。
-F:通常モードで閉じられなかったテーブルのみをチェックします。
-U:エラーが検出された場合、テーブルを破損としてマークします。
4.大規模なMySQLデータベースに追加のメモリを使用する
大規模なデータベースで作業する場合、リカバリには数時間かかる場合があります。 追加のリソースがある場合、それらを使用してプロセスを高速化できます。
5. myisamchkを使用してテーブルデータを取得する
必要に応じて、非常に多くのデータを取得できます。
6.すべてのmyisamchkオプション
チームに関する追加情報を取得するには、ヘルプを使用する必要があります。
#myisamchk --help
一般的なオプション:-s:エラー出力のみ。
-v:詳細情報を出力します。
-V:バージョンの出力と出力。
-w:テーブルがロックされるまで待機します。
検証オプション:-c:テーブルのエラーをチェックします。
-e:非常に「粗い」チェック。 通常モードでエラーが検出されない場合、最後の手段としてのみ使用する必要があります。
-F:クイックチェック。正しく閉じられなかったテーブルのみがチェックされます。
-C:最後のチェック以降に変更されたテーブルのみをチェックします。
-f:-rオプションを使用してmyisamchkを自動的に再起動します。エラーが検出されます。
-i:チェックされたテーブルの統計を出力します。
-m:軽量検証モード、通常より高速、99.99%のエラーが検出されます。
-U:ステータスの更新:エラーが検出された場合、テーブルを破損としてマークします。
-T:テーブルをチェック済みとしてマークしません。
修正オプション:-B:バックアップファイル.MYD、 "filename-time.BAK";
--correct-checksum;
-e:データファイルの最大行数の修正を試みます。 さらに、このコマンドはゴミ文字列を検索します。 状況が絶望的でない場合は、このコマンドを使用しないでください。
-f:古い一時ファイルを上書きします。
-r:実際には一意ではない一意のキーを除くほとんどすべてを修正します。
-n:一時ファイルが非常に大きい場合でも強制的にソートします。
-o:古い回復方法を使用します。
-q:データファイルを変更せずに簡単に修正。
-u:myisampackによってパックされたファイルを解凍します。