semtax의 개발 일지

AWS RDS 쓰다가 터진 문제점 정리 본문

개발/데이터베이스

AWS RDS 쓰다가 터진 문제점 정리

semtax 2020. 6. 15. 11:53
반응형

개요

이번 포스팅에서는 Amazon RDS 에서 발생했던 문제상황 및 주의점 대해서 포스팅을 하려고 한다.

문제 상황

먼저 대규모의 임시 데이터가 들어있는 xxxx_yyyy_table을 mysql client로 접속해서 DROP 명령어로 삭제하였습니다.

DROP TABLE xxxx_yyyy_table;

하지만 삭제하던 도중에 에러가 나서 세션이 끊어졌습니다.

일단, 다시 접속해서 보니 테이블이 삭제된거 같아서 해당 테이블을 다시 생성을 하려고 했으나 아래와 같은 에러가 나면서 테이블 생성이 실패하였습니다.

tablespace name `xxxx_yyyy_table` is exists.

시도한 삽질들

먼저 아래와 같이 단순하게 테이블스페이스(Tablespace)를 삭제 하려고 시도하였습니다.

DROP TABLESPACE xxxx_yyyy_table;

하지만 아래와 같은 에러가 나면서 실패하였습니다.

create tablespace xxxx_yyyy_table add datafile 'xxxx_yyyy_table.ibd' ;
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE TABLESPACE privilege(s) for this operation

자료를 찾아보니 AWS Aurora DB 에서는, 아예 데이터베이스 차원에서 테이블스페이스(Tablespace) 에 대한 권한을 막아놓는 다는 사실을 알게 되었습니다.

그래서, "삭제나 수정은 안되니, 기존에 만들어져있는 테이블 스페이스를 새로만든 테이블에 연결한 뒤, DROP 명령어를 삭제하자는 " 가정을 세웠습니다.

그래서 자료를 찾아보니 AWS RDS Aurora DB 에서는, INFORMATION_SCHEMA.tables 테이블에 테이블스페이스(Tablespace) 정보를 저장한다고 나와있었습니다.

따라서, 아래와 같은 방식으로 테이블스페이스 정보를 직접 찾은 뒤, 새로운 테이블을 생성해서 새로운 테이블과 기존의 Tablespace를 연결 한뒤, DROP 명령어를 이용해서 테이블스페이스를 삭제하려고 시도 하였습니다.

SELECT tablespace_name, table_name FROM xxxx_yyyy_table; // 테이블 스페이스 이름 검색
// 검색한 이름 : innodb_per_table_199
CREATE TABLE xxxx_yyyy_table2 ( ~~~~ ) TABLESPACE `innodb_per_table_199` Engine = InnoDB;

하지만, 아래와 같은 에러가 나면서 실패하였습니다.

ERROR 3199(42000) : InnoDB: A general tablespace name cannot start with 'innodb_'

결국 AWS에 직접 연락을해서 조치를 취해줄때까지 밤새면서 계속 대기하였습니다.

결론

결국, 위와 같은 경우가 발생하면, AWS의 대응만을 기다려야 합니다.

따라서 대용량의 테이블을 DROP 할때는, 절대 도중에 세션이 끊어지게 하면 안됩니다...

p.s 일단 InnoDB가 아닌 MyISAM 등으로 테이블을 생성 하면 일단 생성은 되기는 하지만, 성능상 이슈가 발생하므로 주의 해야 합니다.

출처

  1. Amazon 오로라 첫걸음 교육자료
  2. 삽질
반응형
Comments