web-dev-qa-db-ja.com

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

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

INSERT INTO Zip_codes (Zip_code, city) VALUES ('90210', 'Beverly Hills');

しかし、このクエリを試行すると、次の結果が得られます。

ERROR 1114 (HY000): The table `Zip_codes` is full

「SELECT COUNT(*)FROM Zip_codes」を実行すると、188,959行が得られますが、同じデータベースに810,635行の別のテーブルがあることを考えると、あまり多くはないようです。

私はInnoDBエンジンにかなり不慣れであり、MyISAMでこの問題を経験したことはありません。ここでの潜在的な問題は何ですか?

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

96
Wickethewok

EDIT:ディスクスペースを使い果たしていない場合は、最初に確認してから、構成関連の解像度に解決します。

innodb_data_file_pathmy.cnfの最大サイズが小さすぎるようです。この例では

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

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

たぶん、innodb_file_per_tableを使用してinnodb-per-tableスキームに切り替える必要があります。

84
Martin C.

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

76
maaartinus

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

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

24
Green Card

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

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

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

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

innodb_data_file_path = ibdata1:10M:autoextend
17
cleanunicorn

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

11
fimbulvetr

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

9
skiphoppy

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

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

9
Julio

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

Mysql FQA

7
metdos

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

6
Arun Kumar

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

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

5
Quassnoi

sQLSTATE [HY000]:General error:1114 The table 'catalog_product_index_price_bundle_sel_tmp' is full

解決:

dbの構成を編集します。

nano /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • データベースを再起動
4
Sition

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

ディスクに十分なスペースが使用されているかどうかを確認できます

df -h

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

du -h -d 1 /
2
kite

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

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

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

2
Ólafur Waage

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

1
NotJay

Dockerユーザー:これは、Dockerイメージサイズ制限の約90%に達した場合にも発生します(キャッシュには10%が必要なようです)。これは、Dockerが基本的にすべてに使用できるディスク容量を意味するため、わかりにくい言葉です。

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

enter image description here

1
Sliq

私の場合、サーバーのメモリがいっぱいだったため、DBは一時データを書き込めませんでした。それを解決するには、ドライブ上に場所を作るだけです。

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

1

私の場合、alter tableコマンドを実行しようとしましたが、使用可能なディスク容量がtableのサイズよりも小さくなりました。一度、問題がなくなったディスク領域を増やしました。

0
Pratik Singhal

データベースが存在するvagrant VMで利用可能なメモリ量を増やすことで、この問題を修正しました。

0
yvoloshin

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

Sudo service mysql stop

Sudo service mysql start

0
crmpicco