Amazon RDS for MySQL을 사용할 때 "MySQL HA_ERR_RECORD_FILE_FULL" 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 2월 27일

Amazon Relational Database Service(Amazon RDS) MySQL DB 인스턴스에 쓰기 작업을 수행하려고 하면 다음 오류가 발생합니다.

"Error_code: 1114; handler error HA_ERR_RECORD_FILE_FULL"

이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

이 오류는 복제 실패를 야기하는 읽기 전용 복제본에서 자주 발생합니다. 그러나 데이터를 쓰는 테이블이 가득 찬 경우나 다음 중 하나의 이유로도 이 오류가 발생할 수 있습니다.

  1. 오류 메시지를 전송하는 테이블이 MEMORY 엔진 테이블이고 이 테이블이 최대 크기에 도달했습니다.
  2. 테이블이 MyISAM 엔진 테이블이고 이 테이블이 최대 포인터 크기에 도달했습니다.
  3. 테이블이 InnoDB 엔진을 사용하고 있고 InnoDB 테이블스페이스 파일이 가득 찼습니다.
  4. Amazon RDS DB 인스턴스의 디스크 공간이 부족합니다.
  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 variable 변수의 값보다 큰 경우 테이블이 최대 크기에 도달한 것입니다. 여기에 해당한다면 이것이 오류 메시지의 원인입니다.

이 오류를 해결하려면 DB 인스턴스에 연결된 사용자 지정 파라미터 그룹에서 max_heap_table_size 파라미터의 크기를 늘립니다. 자세한 내용은 DB 파라미터 그룹 생성을 참조하십시오. 사용 중인 Amazon RDS DB 인스턴스 클래스의 DB 인스턴스 클래스 메모리 제한을 초과하지 않아야 합니다. DB 인스턴스의 사용 가능한 메모리에 대한 자세한 내용은 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억 페이지(64TB)입니다. 자세한 내용은 MySQL 설명서의 InnoDB Limits를 참조하십시오.

1TB를 초과하는 테이블의 경우 테이블을 여러 테이블스페이스 파일로 분할할 수 있습니다. 사용 사례에 따라 RANGE, LIST, HASH 등의 다양한 파티셔닝 유형을 사용하여 테이블을 분할할 수 있습니다. 예를 들어 이전 데이터를 생성 연도에 따라 잘라내거나 각 연도에 대한 개별 파티션을 생성할 수 있습니다. 자세한 내용은 MySQL 파일 크기 제한과 MySQL 설명서의 Partitioning을 참조하십시오.

중요: 프로덕션 환경에서 변경을 구현하기 전에 파티셔닝이 애플리케이션에 미칠 수 있는 영향을 면밀히 테스트하십시오.

다음과 유사한 alter table 문을 사용하면 기존 테이블을 분할된 테이블로 변환할 수 있습니다.

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

참고: 기존 테이블을 분할된 테이블로 변환하면 InnoDB 테이블스페이스에 대해 할당된 공간이 복구되지 않습니다. InnoDB 공간을 복구하려면 예상보다 많은 스토리지를 사용하는 Amazon RDS MySQL DB 인스턴스 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

4. Amazon RDS DB 인스턴스의 디스크 공간이 부족함

Amazon RDS DB 인스턴스의 상태가 STORAGE_FULL인 경우 HA_ERR_RECORD_FILE_FULL 오류가 표시됩니다. 이 오류를 해결하려면 DB 인스턴스에 더 많은 스토리지 공간을 추가합니다. 자세한 내용은 Amazon RDS DB 인스턴스 스토리지 부족을 참조하십시오.

필요한 경우 Amazon CloudWatch FreeStorageSpace 지표를 사용하여 DB 인스턴스의 사용 가능한 스토리지 공간을 모니터링할 수 있습니다. 자세한 내용은 Amazon RDS 모니터링 개요를 참조하십시오. low storage Amazon RDS 이벤트 알림을 구독하여 DB 인스턴스가 할당된 스토리지의 90% 이상을 소모한 경우 알림을 받을 수도 있습니다. 자세한 내용은 Amazon RDS 이벤트 카테고리 및 이벤트 메시지를 참조하십시오.

5. 테이블이 파일 크기 제한에 도달함

Amazon RDS의 파일 크기 제한은 InnoDB의 테이블당 파일 테이블스페이스를 16TB로 제한하지만 2014년 이전에 생성된 일부 DB 인스턴스는 제한이 더 낮습니다.

파일 크기 제한이 더 낮은 DB 인스턴스를 사용하는 경우 mysqldump를 사용하여 데이터의 덤프를 생성할 수 있습니다. 그런 다음, 데이터를 제한이 높은 새 DB 인스턴스로 가져옵니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?