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 /var/lib/mysql/bugs/*.MYI >> /tmp/myisamchk_log.txt myisamchk: error: Wrong bytesec: 0-0-0 at linkstart: 18361936 MyISAM-table 'attach_data.MYI' is corrupted Fix it using switch "-r" or "-o" myisamchk: warning: 1 client is using or hasn't closed the table properly MyISAM-table 'groups.MYI' is usable but should be fixed myisamchk: warning: 1 client is using or hasn't closed the table properly MyISAM-table 'profiles.MYI' is usable but should be fixed
一時ファイルで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を使用します。
# myisamchk -r profiles.MYI - recovering (with sort) MyISAM-table 'profiles.MYI' Data records: 80 - Fixing index 1 - Fixing index 2
エラーメッセージがここに表示される場合があります。クライアントがテーブルを使用している、またはテーブルが適切に閉じられていない場合、アプリケーションまたは他のテーブルでテーブルが使用されている場合。 このエラーを回避するには、テーブルの修正を開始する前にmysqldを完了することをお勧めします。 ここでFLUSH TABLESを使用できます。
3. MySQLデータベース全体に対してチェックと修正を実行します
# myisamchk --silent --force --fast --update-state /var/lib/mysql/bugs/*.MYI myisamchk: MyISAM file /var/lib/mysql/bugs/groups.MYI myisamchk: warning: 1 client is using or hasn't closed the table properly myisamchk: MyISAM file /var/lib/mysql/bugs/profiles.MYI myisamchk: warning: 1 client is using or hasn't closed the table properly
-s:エラーのみを出力します。 double -s -sを使用して、モードを可能な限り静かにすることができます。
-f:-rオプションを使用してmyisamchkを自動的に再起動します。エラーが検出されます。
-F:通常モードで閉じられなかったテーブルのみをチェックします。
-U:エラーが検出された場合、テーブルを破損としてマークします。
4.大規模なMySQLデータベースに追加のメモリを使用する
大規模なデータベースで作業する場合、リカバリには数時間かかる場合があります。 追加のリソースがある場合、それらを使用してプロセスを高速化できます。
# myisamchk --silent --force --fast --update-state \ --key_buffer_size=512M --sort_buffer_size=512M \ --read_buffer_size=4M --write_buffer_size=4M \ /var/lib/mysql/bugs/*.MYI
5. myisamchkを使用してテーブルデータを取得する
必要に応じて、非常に多くのデータを取得できます。
# myisamchk -dvv profiles.MYI MyISAM file: profiles.MYI Record format: Packed Character set: latin1_swedish_ci (8) File-version: 1 Creation time: 2007-08-16 18:46:59 Status: open,changed,analyzed,optimized keys,sorted index pages Auto increment key: 1 Last value: 88 Data records: 88 Deleted blocks: 0 Datafile parts: 118 Deleted data: 0 Datafile pointer (bytes): 4 Keyfile pointer (bytes): 4 Datafile length: 6292 Keyfile length: 6144 Max datafile length: 4294967294 Max keyfile length: 4398046510079 Recordlength: 2124 table description: Key Start Len Index Type Rec/key Root Blocksize 1 2 3 unique int24 1 1024 1024 2 5 765 unique char packed stripped 1 2048 4096 Field Start Length Nullpos Nullbit Type 1 1 1 2 2 3 no zeros 3 5 765 no endspace
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によってパックされたファイルを解凍します。