テーブルにデータを入力するために夜間に実行されるはずのかなり大きなクエリを実行しようとしています。エラーが表示されますIncorrect key file for table '/var/tmp/#sql_201e_0.MYI'; try to repair it
が、使用しているストレージ エンジン (デフォルトが何であれ) はテーブルの修復をサポートしていません。
クエリを実行できるようにするにはどうすればよいですか?
テーブルにデータを入力するために夜間に実行されるはずのかなり大きなクエリを実行しようとしています。エラーが表示されますIncorrect key file for table '/var/tmp/#sql_201e_0.MYI'; try to repair it
が、使用しているストレージ エンジン (デフォルトが何であれ) はテーブルの修復をサポートしていません。
クエリを実行できるようにするにはどうすればよいですか?
ほとんどの場合「/tmp」である MySQL の一時フォルダの場所を、より大きなディスク領域のある場所に変更する必要があります。MySQL の構成ファイルで変更します。
基本的に、サーバーは /tmp が配置されているディスク容量を使い果たしています。
MySQLプロンプトから次のコマンドを実行する必要があります。
REPAIR TABLE tbl_name USE_FRM;
USE_FRMオプションは、.MYIインデックスファイルが欠落している場合、またはそのヘッダーが破損している場合に使用できます。このオプションは、.MYIファイルヘッダーの情報を信頼せず、.frmファイルの情報を使用して再作成するようにMySQLに指示します。この種の修理はmyisamchkでは実行できません。
クエリが非常に大きな結果セットを生成しているため、結果の一部または結果の生成に使用される中間生成物を保持するために一時テーブルを作成する必要があります。
一時テーブルは /var/tmp に生成されています。この一時テーブルは破損しているように見えます。おそらく、一時テーブルが構築されていたデバイスのスペースが不足しています。ただし、通常、これにより「領域不足」エラーが発生します。おそらく、マシン上で実行されている何かが一時テーブルを破壊した可能性があります。
より少ないスペースを使用するようにクエリを修正するか、データベースを再構成して、より大きな、またはより安全なパーティションが一時テーブルに使用されるようにしてください。
ストレージ エンジン (MyISAM) は修復テーブルをサポートしています。あなたはそれを修復できるはずです。
修復に失敗した場合は、テーブルが非常に破損していることを示しており、バックアップから復元するしかありません。
同一のテーブルを持つ他のシステム (たとえば、同じソフトウェア バージョンとスキーマを持つ非実稼働システム) がある場合は、いくつかのハッカー (MYI ファイルからコピーして修復する) で修正できる可能性があります。
本質的には、最初からテーブルが壊れないようにすることが秘訣です。これは、データベースを常にクリーンにシャットダウンし、クラッシュしたり、ハードウェアや電源の問題が発生したりしないことを意味します。実際には、これはあまりありそうもないので、耐久性が重要な場合は、よりクラッシュセーフなストレージ エンジンを検討することをお勧めします。
私の場合、ディスク容量の問題がありました。サーバーからいくつかの不要な war ファイルを削除したところ、その後は機能しました。
同様の問題「不正なキー ファイル:\bonga_process\alarms.MYI':修復を試みてください」を解決しました</p>
どのように解決したか:
REPAIR TABLE tbl_name USE_FRM;
コマンドは、MySQL の「ストレージ エンジン」タイプが「MyISAM」である必要がある場合にのみ実行されます
お役に立てれば
データベース、テーブル、および列/フィールドに適切な文字セットと照合を適用します。
あるサーバーから別のサーバーへの SQL クエリを使用して、データベースとテーブル構造を作成します。次のようにデータベース構造を作成します。
テーブルと列の照合順序を に変更utf8_general_ci
すると、エラーが解決します。