1114(HY000):テーブルがいっぱいです


114

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

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');

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

エラー1114(HY000):テーブルzip_codesがいっぱいです

やっている

SELECT COUNT(*) FROM zip_codes

同じデータベースに810,635行の別のテーブルがあることを考えると、188,959行が多すぎるようには見えません。

私はにかなりの経験がInnoDB engineなく、この問題をで経験したことはありませんMyISAM。ここで潜在的な問題のいくつかは何ですか?

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


テーブルに挿入しようとしたときにエラーが発生しますか、それともzip_codesのみを挿入しますか?
チャドバーチ

回答:


92

編集:最初に、構成関連の解決策に解決する前に、ディスク領域が不足していないかどうかを確認します。

あなたは、あなたのために低すぎる最大サイズを持っているように見えるinnodb_data_file_pathあなたの中にmy.cnf、この例では、

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

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

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


このmy.cnfファイルをubuntuで取得するC

3
@Nadh Ubuntu 16.04の一部で/etc/mysql/あり、一部が追加のファイルに分割されています/etc/mysql/conf.d
Martin C.

鉱山は、追加した後に働いたinnodb_data_file_pathに行を/etc/mysql/mysql.conf.d/mysqld.cnfし、再起動mysqlし、apache2 サービスを
Timmah

81

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


1
これは常に最初に確認する必要があります。いつも電源コードに戻って、何度もこれに遭遇しました。
スティーブン教会

1
mysqlの設定を変更するために数時間節約できました。1次区画がいっぱいでした。mysqlデータベースをデータパーティションに移動してからソフトリンクを作成する必要があった
Ganesh Krishnan

2
df -hチェックディスクサイズの使用
Amit Bera '28

25

同じエラーERROR 1114(HY000)も発生します:テーブル '#sql-310a_8867d7f'がいっぱいです

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


これは私に起こりましたが、クライアントが間違った構文を使用しているように見えました。シンプルALTER TABLE my_table ADD INDEX my_index (column_a, column_b);で同じインデックスを追加するとうまくいきました。
thephper

22

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

メモリを512MBに自動拡張する場合

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

制限がわからない、または制限キャップを付けたくない場合は、次のように変更できます

innodb_data_file_path = ibdata1:10M:autoextend

アマゾンでddbbをホストし、自動拡張で構成しました。しかし、設定された保存済みの制限に達したためと同じ問題が発生した
borjab

12

このエラーは、tmpdir常駐するパーティションがいっぱいになった場合にも表示されます(変更テーブルまたはその他の理由により)



10

mysqlテーブルが保存されているパーティション(通常は/ var / lib / mysql)または一時テーブルが保存されている場所(通常は/ tmp)でスペースが不足している可能性があります。

次のことを実行できます。-インデックスの作成中に空き領域を監視します。-tmpdir MySQL変数が別の場所を指すようにします。これにはサーバーの再起動が必要です。


8

8GBのSQLデータベースファイルをインポートしているときにも、このエラーに直面しました。mysqlのインストールドライブを確認しました。ドライブにスペースが残っていません。不要なアイテムを削除してスペースを確保し、データベースインポートコマンドを再実行しました。今回は成功しました。


7

ストレージエンジンとしてNDBCLUSTERを使用する場合は、DataMemoryおよびを増やす必要がありIndexMemoryます。

Mysql FQA


6

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

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


5

SQLSTATE [HY000]:一般エラー:1114テーブル 'catalog_product_index_price_bundle_sel_tmp'がいっぱいです

解決策:

dbの設定を編集:

nano /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • データベースを再起動します

1
これらの512M設定は危険です。複雑な選択での一時テーブルの最大メモリサイズを制御します。「接続ごと」だけでなく、「tmpテーブルごと」でもあります。したがって、これらの値は簡単にRAMを使い果たす可能性があります。
リックジェームズ

4

MySQLドキュメントを引用します。

InnoDBストレージエンジンは、複数のファイルから作成できるテーブルスペース内のInnoDBテーブルを維持します。これにより、テーブルは個々のファイルの最大サイズを超えることができます。テーブルスペースにはrawディスクパーティションを含めることができ、非常に大きなテーブルを作成できます。テーブルスペースの最大サイズは64TBです。

InnoDBテーブルを使用していて、InnoDBテーブルスペースの領域が不足している場合。この場合の解決策は、InnoDBテーブルスペースを拡張することです。セクション13.2.5 [[InnoDBデータとログファイルの追加、削除、またはサイズ変更]を参照してください。]


4

私の場合、それはmysqlサーバーがアプリケーションと一緒に実行され、ディスクがいっぱいであるというあまりに多くのログを書き込むためです。

ディスクに十分なスペースがあるかどうかを確認できます

df -h

ディスク使用率が100%の場合、このコマンドを使用して、大きすぎるディレクトリを見つけることができます。

du -h -d 1 /

4

ドッカーのユーザー:これは、Dockerイメージのサイズ制限の約90%に達したときにも発生します(キャッシュなどに10%が必要であるようです)。これは、Dockerが基本的にすべてに使用できるディスク領域の量を意味するだけなので、この表現は混乱を招きます。

修正するには、Dockerデスクトップ設定>ディスク>スライダーをもう少し右に移動>適用をクリックします。

ここに画像の説明を入力してください


2

CentOS 7では、MySQLサービスを停止して開始するだけでこれが修正されました。

sudo service mysql stop

sudo service mysql start


不思議なことに、これも私にとってはうまくいった。
n0nag0n

2

ディスク容量が少ないため、同じ問題に直面しました。また、InnoDBインフラストラクチャのシステムテーブルスペースであるibdata1ファイルをホストしているパーティションがいっぱいでした。


2

この問題が発生していました...私の場合、専用サーバーのストレージが不足していました。他のすべてが失敗するかどうかを確認し、ディスク容量を増やすか、不要なデータやファイルを削除することを検討してください。


1

私の場合、サーバーのメモリがいっぱいだったため、DBは一時データを書き込めませんでした。それを解決するには、ドライブのどこかに配置する必要があります。


1

データベースが配置されているvagrant VMが利用できるメモリの量を増やすことで、この問題を修正しました。


1

私の場合、alter tableコマンドを実行しようとしましたが、使用可能なディスク容量がテーブルのサイズよりも少なくなっています。一度、私は問題が消えたディスク容量を増やしました。



-1

これは、開いているトランザクションの数に対するInnoDBの制限である可能性もあります。

http://bugs.mysql.com/bug.php?id=26590

元に戻すレコードがある1024トランザクション(データの編集など)では、InnoDBは機能しません


答えは日付が付けられています。
エヴァンキャロル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.