문제 상황
AWS RDS를 사용하다가 프리티어 기간이 만료되어서 새로운 계정으로 DB를 옮겨야할 일이 생겼다.
문제는 현재 개발 환경상 사지방 PC 자체에서 각종 포트들이 막혀있어서, mysql workbench와 같은 상용프로그램을 사용할 수 없는 상태이다. 그래서 외부 리눅스 서버에 웹콘솔로 접속을해서 해당 DB의 Mysql Dump를 뜨고, 옮겨서 load를 해야하는 상황이다.
해결 방법
1. AWS EC2를 생성 및 mysql-client 설치
sudo apt update
sudo apt install mysql-client
2. mysqldump 명령어로 덤프 파일 만들기
mysqldump -u <유저명> -p -h <old 호스트주소> <스키마명> > <파일이름.sql>
위와 같은 형태로 덤프 파일을 추출할 수 있다. 아래는 예시이다.
mysqldump -u admin -p -h old.hostaddress.rds.amazonaws.com DB_NAME > db.sql
3. RDS에서 허용하지 않는 옵션들 지우기
mysqldump 명령어로 덤프파일을 생성할 때, AWS RDS에서 새로운 db.sql 파일을 load할 때 허용되지 않는 옵션들이 생성되게 된다.
vi db.sql
vi 나 vim명령어로 추출한 sql 파일을 열어준다. 아래 3개의 옵션을 주석처리 혹은 지워주면 된다.
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
이때 vi 명령어모드(esc)에서 문자열 찾기를 하면 좀 더 수월하게 지울 수 있다.
/검색어 : '검색어'를 찾을 수 있다.
n : 다음 검색어 뒤로 이동.
4. 덤프파일 옮기기(load)
먼저 Database를 생성해줘야한다. 새로운 RDS에 접속해서 DATABASE를 create한다.
CREATE DATABASE 데이터베이스명;
mysql -u username123 -p -h new.hostname.ap-northeast-2.rds.amazonaws.com // 접속
CREATE DATABASE new_db_name; // 새로운 DATABASE 생성
만들어둔 덤프파일을 새로운 데이터베이스에 아래와 같은 형태로 불러올 수 있다.
mysql -u <유저명> -p -h <new 호스트주소 > <데이터베이스명> < <파일이름.sql>
아래는 예시이다.
mysql -u username123 -p -h new.hostname.ap-northeast-2.rds.amazonaws.com new_db_name < db.sql
성공적으로 DB이전이 완료되었다. dump파일을 만들고 load하는 과정에서 하드웨어, 네트워크 상태에 따라 렉이 걸리거나 버퍼링이 걸릴 수 있으나 dump파일 용량이 커서 그러니 잠깐 놔두면 정상적으로 명령이 수행된다.