Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Mintaka's log

[DB]다른 AWS RDS에서 내 AWS RDS로 스키마 옮기기 본문

etc...

[DB]다른 AWS RDS에서 내 AWS RDS로 스키마 옮기기

_해랑 2022. 11. 17. 09:52

사용한 tool은 Oracle SQL Developer MYSQL Workbench.

 

 

aws를 사용하기 때문에 스냅샷이라는 기능(현재 db의 상태를 파일로 저장해서 공유 할 수 있는 기능이라고 한다)을 이용할 수 있지만, 프리티어의 경우에는 안된다는 블로그 글을 보고는 다른방법을 사용하기로 했다.

(출처 : https://programforlife.tistory.com/108?category=909996) 

 

[AWS] RDS 인스턴스 다른 계정으로 이관하기 (프리티어)

이번에 AWS 기반으로 운영하던 서비스 이관 업무를 맡게 되었습니다. 서비스 전체를 이관하기 위해서는 다음과 같은 과정을 거쳐야 합니다. 도메인 이관 EC2 이관 RDS 이관 보안설정 ALB(로드 발란

programforlife.tistory.com

 

 

덤프(dump) 데이터를 생성한 다음, rds에 연결된 상태의 새로운 db에 해당 덤프 데이터를 집어넣기로 함.

 


<sqldeveloper로 시도함>

1. 덤프 데이터 생성

 

 

 

최대 자동 열기 크기를 초과해서 열 수 없다는 에러 -> 데이터가 너무 많아서 생김. sql devleoper에서 열 수 없다는거지, 실제 저장된 파일 열어보니 전부 저장되어 있기는 함.

 

문제는... 전부 insert문뿐이다. 게다가 ddl은 없어서 테이블 따로 생성해주어야 하고. 이벤트 설정해준것도 가져올 수 없다...

 

그래서 그냥 sqldeveloper말고 mysql workbench 설치하기로 했다.

 


<MYSQL Workbench로 시도>

export할 db 연결해 준 후 data export 클릭.

물론 objects to export에서 dump events 는 체크해줌.

 

똑같이 server탭에서 data import 선택.....해서 하면 되는데.

그런데 어디로 import 하냐는 문제가 발생...

aws에 이미 같은 이름으로 존재하고 있는 인스턴스가 있어서 임포트 할 경우 어떻게 될지 모르겠다.

새롭게 인스턴스를 만들 경우 20GB 프리티어 +  20 GB프리티어 = 20GB 과금 이라서 차라리 다른 클라우드 데이터베이스를 사용하는건 어떨까? 해서 찾아본 것이 구글과 오라클 클라우드.

하지만 프리티어의 범위를 잘 모르겠어서 그냥 aws의 같은 인스턴스에 집어넣기로. 대신 테이블명 앞에 각 프로젝트 이름을 붙여줘서 구분가능하도록 하기로 했다.

 

즉... db 전체를 export하지 않고 테이블별로 임포트 해야했다.

 


aws rds에 굳이 인스턴스를 추가하지 않고 스키마만 추가하면 새롭게 만들 수 있는 것 같다! 


따라서 임포트시 다음과 같이 설정해줌

이 때 SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN 권한이 필요하다고 에러가 뜨는데...

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

 

mysqldump를 사용하여 Amazon RDS MySQL로 가져올 때 정의자 오류 해결

mysqldump를 사용하여 Amazon RDS for MySQL DB 인스턴스로 데이터를 가져올 때 1227 및 정의자 오류를 해결하려면 어떻게 해야 하나요? 최종 업데이트 날짜: 2022년 4월 29일 mysqldump를 사용하여 MySQL DB 인스

aws.amazon.com

그래서 이렇게 해주고.

덤프파일에서 SET @@어쩌고 ~ 이렇게 되어있는 부분을 전부 주석처리 해주었다.

위와 같이 할 경우 import는 에러없이 수행된다. 다만.. 또 문제가 발생하는데. 바꿔준 스키마명이 아니라 원래 스키마명인 mydb로 저장되어버린다. 


<MYSQL Workbench로 스키마명 변경해서 export/import 하기>

export할 때는 다음과 같이 설정해주고 (나는 이벤트를 가져올 필요가 있어서 dump events 체크해주었다)

 

import 할 때는 다음과 같이 설정해주었다.

Default Target Schema에 새롭게 지정해주고 싶은 스키마명을 New 를 눌러서 입력해주면 된다.

 

드디어 해결했다ㅠㅜㅜㅠㅠ