이번에 AWS 기반으로 운영하던 서비스 이관 업무를 맡게 되었습니다.
서비스 전체를 이관하기 위해서는 다음과 같은 과정을 거쳐야 합니다.
- 도메인 이관
- EC2 이관
- RDS 이관
- 보안설정
- ALB(로드 발란서) 이관
이 작업들 중 RDS 이관을 먼저 진행했습니다.
A계정에서 B계정으로 RDS 인스턴스를 그대로 옮기면 됩니다.
저는 먼저 다음과 같은 과정으로 이관하려고 했습니다.
- A계정의 RDS 인스턴스 스냅샷 생성
- 해당 스냅샷을 B계정과 공유
- B계정에서, 공유된 스냅샷으로 데이터베이스 복원
매우 간단하다고 생각하고, 작업을 진행했습니다.
1. A계정의 RDS 인스턴스 스냅샷 생성
그럼 A계정으로 로그인해서, 해당 데이터베이스에 대한 스냅샷을 생성하겠습니다.
2. 해당 스냅샷을 B계정과 공유
이 단계에서 처음에 스냅샷을 생성하고, "스냅샷 생성 시간"에 해당 날짜가 나오기 전에 "스냅샷 공유"기능을 선택할 수 없습니다.
스냅샷을 생성하고 일정 시간이 지나고, "스냅샷 생성 시간"에 날짜가 찍히면 "스냅샷 공유"를 할 수 있습니다.
공유를 하기 전에, B계정의 아이디를 알아야 합니다.
단순히 로그인할 때 사용하는 ID가 아니라, 스냅샷 공유 ID는 숫자로 된 ID가 필요합니다.
B계정으로 로그인하고, 프로필 부분을 클릭하면 [내 계정]과 숫자로 된 ID를 볼 수 있습니다.
다시 A계정으로 돌아와서 B계정의 ID를 적고 공유 계정에 추가해줍니다.
3. B계정에서, 공유된 스냅샷으로 데이터베이스 복원
B계정으로 다시 로그인하고, RDS > 스냅샷 부분에서 "나와 공유됨"을 클릭하면, A계정에서 공유된 스냅샷을 확인 할 수 있습니다.
해당 스냅샷을 선택한 후, "작업"의 "스냅샷 복원"을 클릭하여 원하는 데이터베이스 옵션으로 데이터베이스 복원을 시작하면 완료됩니다.
하지만 여기서 저에게는 문제가 생겼습니다.
공유된 해당 스냅샷으로 복원을 하는 과정에서, B계정에 생성할 데이터베이스 옵션 중에 프리티어로 생성할 수가 없었습니다.
만약 프리티어가 아닌, 다른 옵션으로 데이터베이스 생성을 해도 무관하시다면, 여기까지 읽으셔도 무방합니다.
A계정에서 B계정으로 RDS 인스턴스 프리티어로 이관하기
위 과정은 RDS인스턴스를 프리티어가 아닌 옵션으로 이관하고 싶을 때 좋은 방법입니다.
저는 프리티어로 인스턴스를 이관해야 했기 때문에 다음과 같은 과정을 거쳤습니다.
- A계정의기존 데이터베이스 덤프 생성
- B계정에서 RDS 프리티어 인스턴스 생성
- B계정의 데이터베이스에서, 이전에 생성한 덤프로 restore
저는 위와 같은 과정을 진행하기 위해 데이터 베이스 접속 툴인 DBeaver를 사용했습니다.
1. A계정의 기존 데이터베이스 덤프 생성
DBeaver에 연결돼있는 데이터베이스를 오른쪽 클릭하고 "Dump Database"를 해줍니다.
그럼 아래와 같이 데이터베이스를 이관하는 SQL문이 생성됩니다.
2. B계정에서 RDS 프리티어 인스턴스 생성
해당 내용은 다음 포스팅을 참고하시면 됩니다.
https://programforlife.tistory.com/3
3. B계정의 데이터베이스에서, 이전에 생성한 덤프로 restore
데이터베이스 툴에서, B계정의 데이터베이스에서 오른쪽 클릭 후 "Restore database"를 클릭해줍니다.
그리고 아까 1번 과정에서 생성했던 덤프를 선택해줍니다.
그리고 "Start"를 클릭하면, 다음과 같은 에러가 뜹니다.
Error 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation
에러 문을 살펴보면, 계정에 권한이 충분하지 않다고, 해당 작업을 진행하려면 SUPER, SYSTEM_VARIABLES_ADMIN, SESSION_VARIABLES_ADMIN 중 하나의 권한이 필요하다고 합니다.
프리티어 RDS 인스턴스를 생성할 때 최고 권한을 갖고 있는 ADMIN 계정으로 생성하고, ADMIN 계정으로 로그인했는데 권한이 부족하다는 게 이해가 안 갔습니다.
조금 자료를 찾아본 결과, 생성한 ADMIN 계정은 마스터 계정과 동일한 권한을 가진 계정이 아닙니다.
그래서 DBeaver 툴에서, ADMIN 계정의 권한을 보고 모두 추가해주려고 다음과 같이 진행했습니다.
이렇게 ADMIN 계정에 대한 모든 권한을 체크하고 저장을 눌러줬습니다.
그러자 다음과 같은 에러가 발생했습니다.
Access denied for user 'admin'@'%' *(using password: YES)
이 에러를 보고 비밀번호를 틀린 건가, 권한 설정을 잘못했나 하고 찾아봤지만 문제는 없었습니다.
해결 방법은 꽤 간단했습니다.
ADMIN 계정에 대한 모든 권한을 체크하는 게 아니라, 아까 덤프로 restore 할 때 나왔던 권한 부족 에러에서 말한 권한 중, 하나만 체크해 주었습니다. 그중 SYSTEM_VARIABLES_ADMIN 권한을 체크해주고 저장해줬습니다.
그리고 덤프로 restore를 진행하니 정상적으로 데이터베이스 이관이 모두 완료되었습니다.
'AWS > RDS' 카테고리의 다른 글
[AWS] RDS 시간 설정 하기 (Timezone 변경) (3) | 2021.04.04 |
---|---|
[AWS] RDS MySQL 인스턴스에 접속하기 (DBeaver 툴 사용) (4) | 2021.01.31 |
[AWS] 프리티어 RDS 과금막기, 과금 내용 확인하기 (3) | 2021.01.31 |
[AWS] RDS 프리티어 인스턴스 생성하기 (0) | 2020.12.31 |
[AWS] RDS (0) | 2020.12.31 |
댓글