MySQL 用 Amazon Relational Database Service(Amazon RDS)データベースのインスタンスに書き込もうとすると、次のエラーが発生します。

"Error_code: 1114; handler error HA_ERR_RECORD_FILE_FULL"

このエラーの解決方法を教えてください。

このエラーは、ほとんどの場合、レプリケーションが失敗する原因となるリードレプリカで発生します。ただし、このエラーは、データが書き込まれているテーブルがいっぱいになったときも発生する可能性があります。または、次のいずれかが原因で発生する可能性もあります。

  1. エラーメッセージを送信しているテーブルは MEMORY エンジンのテーブルであり、このテーブルが最大サイズに達しました。
  2. テーブルは MyISAM エンジンのテーブルであり、このテーブルは最大ポインターサイズに達しました
  3. テーブルは InnoDB エンジンを使用しており、InnoDB テーブルスペースのファイルがいっぱいです。
  4. Amazon RDS インスタンスのディスク容量が不足しています。
  5. テーブルがファイルサイズの制限に達しました

Amazon RDS がサポートするストレージ エンジンの詳細については、「Amazon RDS の MySQL でサポートされるストレージ エンジン」を参照してください。

1.    MEMORY エンジンのテーブルが最大サイズに達しました

次のようなコマンドを実行してエンジンの値を確認し、MEMORY エンジンのテーブルが最大サイズに達したことを確認します。

mysql> show table status from database_name like 'table_name'\G

出力 data_length 変数の値が max_data_length 変数の値より大きい場合、テーブルは最大サイズに達します。これがエラーメッセージの原因です。

このエラーを解決するには、DB インスタンスに関連付けられているカスタム パラメーター グループの max_heap_table_size パラメーターのサイズを大きくします。詳細については、「DB パラメーター グループの作成」を参照してください。使用する Amazon RDS インスタンスクラスに基づくインスタンスクラスのメモリ制限を超えないようにしてください。インスタンスで使用可能なメモリの詳細については、「Amazon RDS インスタンスタイプ」を参照してください。

2.    MyISAM エンジンのテーブルが最大ポインターサイズに達しました

次のようなコマンドを実行してエンジンの値を確認し、MyISAM エンジンのテーブルが最大ポインターサイズに達したことを確認します。

mysql> show table status from database_name like 'table_name'\G

このエラーを解決するには、ALTER TABLE コマンドを使用して既存テーブルの最大サイズを変更します。

mysql> ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;

オプションでは、すべての MyISAM テーブルでデフォルトのサイズ制限を変更できます。次に、カスタム DB パラメーター グループの myisam_data_pointer_size パラメーターをより高い値に設定します。

3.    InnoDB テーブルスペースのファイルがいっぱいです

InnoDB テーブルで、テーブルスペースの最大サイズは 40 億ページ (64 TB) です。詳細については、「InnoDB テーブルの制限」に関する MySQL ドキュメントを参照してください。

1 TB より大きいテーブルでは、テーブルを複数のテーブルスペース ファイルにパーティションできます。RANGE、LIST、HASH など、さまざまなタイプのパーティション分割を使用して、ユースケースに基づいてテーブルをパーティションできます。たとえば、作成された年に基づいて古いデータを切り詰めたり、各年の独立したパーティションを作成したりできます。詳細については、「MySQL ファイルサイズの制限」「パーティション分割」に関する MySQL ドキュメントを参照してください。

重要: 稼働環境で変更を実装する前に、パーティション分割がアプリケーションに及ぼす影響について、徹底的にテストします。

次のような ALTER TABLE ステートメントを使用して、既存のテーブルをパーティション分割されたテーブルに変換できます。

ALTER TABLE table_name 
PARTITION BY HASH(id)
PARTITIONS 8;

注: 既存のテーブルをパーティション分割されたテーブルに変換しても、InnoDB テーブルスペースに割り当てられたスペースは復元されません。InnoDB スペースを復元するには、「予想より多くのストレージを使用している Amazon RDS MySQL DB インスタンスに関する問題を解決する方法は何ですか?」を参照してください。

4.Amazon RDS インスタンスのディスク容量が不足しています

Amazon RDS インスタンスが STORAGE_FULL 状態にある場合、HA_ERR_RECORD_FILE_FULL エラーを受信します。このエラーを解決するには、DB インスタンスにストレージスペースを追加します。詳細については、「ストレージが不足している Amazon RDS DB のインスタンス」を参照してください。

オプションで、Amazon CloudWatch FreeStorageSpace メトリックスを使用して、DB インスタンスで利用可能なストレージスペースをモニタリングできます。詳細については、「Amazon RDS モニタリングの概要」を参照してください。DB インスタンスが、割り当てられたストレージの 90% 以上を消費したときに通知を受け取るために、少ないストレージの Amazon RDS イベント通知を購読することもできます。詳細については、「Amazon RDS のイベント カテゴリとイベント メッセージ」を参照してください。

5.    テーブルがファイルサイズの制限に達しました

Amazon RDS のファイルサイズ制限により、InnoDB テーブルごとのファイルに対するテーブルスペースは 16 TB に制限されますが、2014 年以前に作成された一部の DB インスタンスには下限があります。詳細については、「Amazon RDS の MySQL ファイルサイズ制限」を参照してください。

サイズ制限の小さいインスタンスがある場合は、mysqldump を使用してデータのダンプを取得することができます。次に、制限を超える新しい DB インスタンスにデータをインポートします。


このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください

公開日: 2019 年 2 月 27 日