web-dev-qa-db-ja.com

テーブルを修復できない場合、MySQLの「不正なキーファイル」エラーをどのように修正しますか?

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

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

36
Wayne Molina

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

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

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

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

2
MarkR

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

基本的に、サーバーは/ tmpがあるディスク領域を使い果たしています。

48
marknt15

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

REPAIR TABLE tbl_name USE_FRM;

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

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

32
Drew

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

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

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

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

8
Martin

PHPMYADMINのシンプルな「テーブルの修復」でこの問題を解決しました。

  1. phpmyadminに移動します
  2. 問題のあるテーブルを開く
  3. [操作]タブに移動します(私のバージョンのPMAで)
  4. 下部に「修復テーブル」リンクがあります
1

REPAIR TABLE tbl_name USE_FRM;

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

お役に立てれば

1
BhavyaSoft

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

1
Ninad Pingale

この問題は、特定のドライブ(c:\またはd:\など)のストレージ領域の可用性が低いためです。メモリを解放すると動作します。

ありがとう、Saikumar.P

1
sai kumar

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

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

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

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