86


24

単純なクエリでInnoDBテーブルに行を追加しようとしています。

INSERT INTO zip_codes(zip_code、city)値( '90210'、 'ビバリーヒルズ');

しかし、このクエリを試みると、次のようになります。

エラー1114(HY000):テーブル `zip_codes`が一杯です

"SELECT COUNT(*)FROM zip_codes"を実行すると、188,959行が得られます。同じデータベースに810,635行のテーブルがあることを考えれば、それほど多くはありません。

私はInnoDBエンジンにはかなり慣れておらず、MyISAMでこの問題を経験したことは一度もありません。 ここでいくつかの潜在的な問題は何ですか?

編集:これはzip_codesテーブルに行を追加するときにのみ発生します。

20 Answer


76


*編集:*設定に関連する解決策を解決する前に、あなたがディスクスペースを使い果たしていないかどうか、最初のチェック。

あなたの my.cnf`の中の innodb_data_file_path`には小さすぎる最大サイズがあるようです、この例では

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

すべてのinnodbテーブルを合わせて512MBを超えるデータをホストすることはできません。

たぶんあなたは `innodb_file_per_table`を使ってinnodb-per-tableスキームに切り替えるべきです。


74


考えられるもう1つの理由は、パーティションがいっぱいになっていることです。これが、今私に起こったことです。


23


あなたはまた、同じエラーが表示されますエラー1114(HY000):テーブル '#sql-310a_8867d7f’がいっぱいです

ストレージエンジンMEMORYを使用しているテーブルにインデックスを追加しようとした場合。


16


INNO_DBテーブル用にmy.cnfに設定されている制限キャップを変更する必要があります。 このメモリ制限は個々のテーブルに対して設定されるのではなく、結合されたすべてのテーブルに対して設定されます。

メモリを512MBに自動拡張したい場合

innodb_data_file_path = ibdata1:10M:自動拡張:最大:512M

限度がわからない場合や、限度額を設定したくない場合は、次のように変更できます。

innodb_data_file_path = ibdata1:10M:自動拡張


10


このエラーは `tmpdir`が存在するパーティションがいっぱいになった場合にも現れます(変更テーブルその他の理由で)


9


mysqlテーブルが格納されているパーティション(通常は/ var / lib / mysql)または一時テーブルが格納されている場所(通常は/ tmp)のいずれかで空き容量が不足している可能性があります。

  • インデックス作成中に空き容量を監視します。 - tmpdir MySQL変数を別の場所に指定します。 これにはサーバーの再起動が必要です。


9


私の場合、これはibdata1ファイルをホストしているパーティションがいっぱいだったためです。


7


ストレージエンジンとしてNDBCLUSTERを使用する場合は、 DataMemory`と IndexMemory`を増やすべきです。


6


8GBのSQLデータベースファイルをインポートしている間、私もこのエラーに直面しました。 私のMySQLのインストールドライブをチェックした。 *ドライブにスペースが残っていなかったので*不要なアイテムを削除してデータベースのインポートコマンドを再実行することでスペースを確保しました。 今回は成功しました。


5


innodb_file_per_tableオプションを有効にしていない限り、InnoDBはすべてのデータを1つのファイルに保存します。通常はibdata1と呼ばれます。

そのファイルのサイズを確認し、それが存在するドライブに十分なディスク容量があることを確認してください。