개발연습/db

rds인스턴스의 데이터를 다른 rds인스턴스로 이전하기

종이비행기 2021. 12. 1. 02:58

드디어 SW마에스트로 12기 과정이 모두 끝났다.

그리고 aws계정 비용 지원도 끝났다.

거기에 더해서 aws계정도 삭제 예정이다.

따라서 모든 인프라를 우리 팀 개인 계정으로 옮겨야 한다.

 

여기서 제일 중요한게 데이터이다.

현재 서버에서 돌아가고 있는 모든 데이터를 옮겨야 한다.

 

그 과정을 포스팅 해보도록 하겠다.

 

1. 기존 rds에서 데이터 꺼내기

우선 workbench를 켜고, 기존 rds에 접속한다.

위 메뉴에서, Server - Data Export 에 들어간다.

 

Tables to Export에서 내가 export할 schema를 선택하고, Export Option에서 Export to Self-Contained File을 선택하고, 데이터를 추출한 sql파일을 저장할 경로를 선택한다. 그리고 Start Export를 누르면 지정한 경로에 sql파일 하나가 생성된다.

 

 

2. 새 rds에 데이터 집어넣기

*이 방법은 rds가 퍼블릭 엑세스 허용인 경우에만 사용 가능하다.*

 

이번에는 workbench를 사용하지 않고, 리눅스 환경에서 진행한다.

(workbench에서 진행하면, 후술할 오류를 해결할 수 없었기 때문이다..)

본인은 wsl에서 진행하였다.

 

우선 mysql-client를 설치해야 한다.

다음 명령어를 실행해주자

sudo apt-get install mysql-client

 

그 다음 아래 명령어를 입력한다.

mysql -h <rds 엔드포인트> -P <포트번호> -u <마스터 사용자 이름> -p <스키마 이름> < <내가 추출한 파일 이름>

< > 으로 설명되있는 부분은 본인의 값에 맞게 작성하면 된다.

위 명령어를 입력하면 rds의 비밀번호를 입력하라는 값이 나오고, 입력하면 아무 출력 없이 다음 프롬프트가 등장한다.

이후 workbench에서 새로고침을 해보면 데이터가 잘 들어있는 것을 확인 할 수 있다.

 

 

그런데.. 대부분 위 명령어를 치면 오류가 발생 할 것이다.

 

ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMINARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation

 

 

해결하는 방법은 다음과 같다.

 

1. aws에서 설명하는 오류해결방법을 그대로 따라한다.

https://aws.amazon.com/ko/premiumsupport/knowledge-center/error-1227-mysqldump/

 

Amazon RDS MySQL 인스턴스에서 자동 백업 또는 복제를 활성화하는 경우 발생하는 ERROR 1227 해결

Internet Explorer에 대한 AWS 지원이 07/31/2022에 종료됩니다. 지원되는 브라우저는 Chrome, Firefox, Edge 및 Safari입니다. 자세히 알아보기

aws.amazon.com

 

2. 추출한 sql파일에서 다음 명령어 줄을 주석처리한다.

 

SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

경우에 따라 위 명령어가 여러줄이 존재 할 수 있다. ctrl + F 로 모두 찾아서 주석처리를 하는것을 추천한다.