myisamchkで破損したMySQLテーブルを修正する

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 /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によってパックされたファイルを解凍します。



All Articles