46

テーブルにデータを入力するために夜間に実行されるはずのかなり大きなクエリを実行しようとしています。エラーが表示されますIncorrect key file for table '/var/tmp/#sql_201e_0.MYI'; try to repair itが、使用しているストレージ エンジン (デフォルトが何であれ) はテーブルの修復をサポートしていません。

クエリを実行できるようにするにはどうすればよいですか?

4

12 に答える 12

58

ほとんどの場合「/tmp」である MySQL の一時フォルダの場所を、より大きなディスク領域のある場所に変更する必要があります。MySQL の構成ファイルで変更します。

基本的に、サーバーは /tmp が配置されているディスク容量を使い果たしています。

于 2010-11-02T07:48:49.000 に答える
48

MySQLプロンプトから次のコマンドを実行する必要があります。

REPAIR TABLE tbl_name USE_FRM;

修復コマンドに関するMySQLのドキュメントから:

USE_FRMオプションは、.MYIインデックスファイルが欠落している場合、またはそのヘッダーが破損している場合に使用できます。このオプションは、.MYIファイルヘッダーの情報を信頼せず、.frmファイルの情報を使用して再作成するようにMySQLに指示します。この種の修理はmyisamchkでは実行できません

于 2011-08-16T17:00:03.980 に答える
11

クエリが非常に大きな結果セットを生成しているため、結果の一部または結果の生成に使用される中間生成物を保持するために一時テーブルを作成する必要があります。

一時テーブルは /var/tmp に生成されています。この一時テーブルは破損しているように見えます。おそらく、一時テーブルが構築されていたデバイスのスペースが不足しています。ただし、通常、これにより「領域不足」エラーが発生します。おそらく、マシン上で実行されている何かが一時テーブルを破壊した可能性があります。

より少ないスペースを使用するようにクエリを修正するか、データベースを再構成して、より大きな、またはより安全なパーティションが一時テーブルに使用されるようにしてください。

MySQL マニュアル - B.5.4.4. MySQL が一時ファイルを保存する場所

于 2010-03-12T06:58:45.343 に答える
5

ストレージ エンジン (MyISAM) は修復テーブルをサポートしています。あなたはそれを修復できるはずです。

修復に失敗した場合は、テーブルが非常に破損していることを示しており、バックアップから復元するしかありません。

同一のテーブルを持つ他のシステム (たとえば、同じソフトウェア バージョンとスキーマを持つ非実稼働システム) がある場合は、いくつかのハッカー (MYI ファイルからコピーして修復する) で修正できる可能性があります。

本質的には、最初からテーブルが壊れないようにすることが秘訣です。これは、データベースを常にクリーンにシャットダウンし、クラッシュしたり、ハードウェアや電源の問題が発生したりしないことを意味します。実際には、これはあまりありそうもないので、耐久性が重要な場合は、よりクラッシュセーフなストレージ エンジンを検討することをお勧めします。

于 2010-03-12T07:41:09.723 に答える
1

私の場合、ディスク容量の問題がありました。サーバーからいくつかの不要な war ファイルを削除したところ、その後は機能しました。

于 2016-07-04T10:47:54.030 に答える
1

同様の問題「不正なキー ファイル:\bonga_process\alarms.MYI':修復を試みてください」を解決しました</p>

どのように解決したか:

  1. サーバー構成アプリケーション ServerConfiguration.exe を起動しました
  2. メンテナンスタブ
  3. [テーブルの修復] コマンド ボタンをクリックします。
  4. ディスク領域を解放するためにファイルを削除するプロンプトが、[ストレージの管理] コマンド ボタンとともに表示されます
  5. [ストレージの管理] コマンドをクリックすると、ディスク領域を解放するために削除する必要があるいくつかのファイルが表示されます。不要なファイルを削除します。
  6. システム監査アプリケーションを再起動します
于 2022-01-13T12:38:14.300 に答える
1

REPAIR TABLE tbl_name USE_FRM;

コマンドは、MySQL の「ストレージ エンジン」タイプが「MyISAM」である必要がある場合にのみ実行されます

お役に立てれば

于 2017-07-08T12:35:27.440 に答える
0

データベース、テーブル、および列/フィールドに適切な文字セットと照合を適用します。

あるサーバーから別のサーバーへの SQL クエリを使用して、データベースとテーブル構造を作成します。次のようにデータベース構造を作成します。

  1. 文字セットが「utf8」、照合順序が「utf8_general_ci」のデータベース
  2. 「utf8」の文字セットと「utf8_bin」の照合を持つテーブル。
  3. テーブルの列/フィールドには、文字セット「utf8」と照合順序「utf8_bin」があります。

テーブルと列の照合順序を に変更utf8_general_ciすると、エラーが解決します。

于 2014-05-03T10:42:19.277 に答える