私は単純なクエリで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テーブルに行を追加するときにのみ発生します。
EDIT:ディスクスペースを使い果たしていない場合は、最初に確認してから、構成関連の解像度に解決します。
innodb_data_file_path
のmy.cnf
の最大サイズが小さすぎるようです。この例では
innodb_data_file_path = ibdata1:10M:autoextend:max:512M
すべてのinnodbテーブルの合計で512MBを超えるデータをホストすることはできません。
たぶん、innodb_file_per_table
を使用してinnodb-per-tableスキームに切り替える必要があります。
もう1つの考えられる理由は、パーティションがいっぱいになっていることです。これが今私に起こったことです。
また、同じエラーERROR 1114(HY000)が発生します:テーブル '#sql-310a_8867d7f'はいっぱいです
ストレージエンジンMEMORYを使用しているテーブルにインデックスを追加しようとした場合。
INNO_DBテーブルのmy.cnfで設定された制限キャップを変更する必要があります。このメモリ制限は個々のテーブルに対して設定されるのではなく、すべてのテーブルを組み合わせて設定されます。
メモリを512MBに自動拡張する場合
innodb_data_file_path = ibdata1:10M:autoextend:max:512M
制限がわからない場合、または制限キャップを付けたくない場合は、次のように変更できます
innodb_data_file_path = ibdata1:10M:autoextend
このエラーは、tmpdir
が存在するパーティションがいっぱいになった場合にも表示されます(変更テーブルまたはその他の理由により)
私の場合、これはibdata1ファイルをホストしているパーティションがいっぱいだったためです。
Mysqlテーブルが保存されているパーティション(通常は/ var/lib/mysql)または一時テーブルが保存されている場所(通常/ tmp)のスペースが不足している可能性があります。
次のことができます。-インデックスの作成中に空き領域を監視します。 -tmpdir MySQL変数を別の場所にポイントします。これにはサーバーの再起動が必要です。
ストレージエンジンとしてNDBCLUSTERを使用する場合は、DataMemory
およびIndexMemory
を増やす必要があります。
8GBのsqlデータベースファイルをインポートしているときに、このエラーに直面しました。 mysqlインストールドライブを確認しました。 ドライブにスペースが残っていませんでした。不要なアイテムを削除してデータベースインポートコマンドを再実行することで、スペースを確保しました。 今回は成功しました。
innodb_file_per_table
オプションを有効にしない限り、InnoDB
は、通常ibdata1
と呼ばれる1つのファイルにすべてのデータを保持します。
そのファイルのサイズを確認し、ファイルが存在するドライブに十分なディスク容量があることを確認します。
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
私の場合、mysqlサーバーがアプリケーションと一緒に実行されるため、ディスクがいっぱいになるほど多くのログを書き込みます。
ディスクに十分なスペースが使用されているかどうかを確認できます
df -h
ディスク使用率が100%の場合、このコマンドを使用して、どのディレクトリが大きすぎるかを見つけることができます。
du -h -d 1 /
MySQLドキュメントを引用します。
InnoDBストレージエンジンは、いくつかのファイルから作成できるテーブルスペース内にInnoDBテーブルを保持します。これにより、テーブルが個々の最大ファイルサイズを超えることができます。テーブルスペースにはrawディスクパーティションを含めることができ、これにより非常に大きなテーブルが可能になります。最大テーブルスペースサイズは64TBです。
InnoDBテーブルを使用していて、InnoDBテーブルスペースのスペースが足りない場合。この場合、解決策はInnoDBテーブルスペースを拡張することです。セクション13.2.5、「「InnoDBデータおよびログファイルの追加、削除、またはサイズ変更」」を参照してください。
この問題が発生していました...私の場合、専用サーバーのストレージが不足していました。他のすべてが失敗した場合は確認し、ディスク容量を増やすか、不要なデータやファイルを削除することを検討してください。
私の場合、サーバーのメモリがいっぱいだったため、DBは一時データを書き込めませんでした。それを解決するには、ドライブ上に場所を作るだけです。
ディスク容量が少ないため、同じ問題に直面しました。また、InnoDBインフラストラクチャのシステムテーブルスペースであるibdata1ファイルをホストしているパーティションがいっぱいでした。
私の場合、alter tableコマンドを実行しようとしましたが、使用可能なディスク容量がtableのサイズよりも小さくなりました。一度、問題がなくなったディスク領域を増やしました。
データベースが存在するvagrant VMで利用可能なメモリ量を増やすことで、この問題を修正しました。
CentOS 7では、MySQLサービスを停止および開始するだけでこれが修正されました。
Sudo service mysql stop
Sudo service mysql start