Wisdom’s Cloud

[AWS] 2. DMS를 사용하여 MySQL 데이터베이스 마이그레이션 본문

AWS/Migration

[AWS] 2. DMS를 사용하여 MySQL 데이터베이스 마이그레이션

지혜로운지혜쓰 2022. 2. 15. 14:18

Database Migration Service

  • DMS는 관계형 데이터베이스, 데이터 웨어하우스, NoSQL 데이터베이스 및 기타 유형의 데이터 저장소를 쉽게 마이그레이션할 수 있는 클라우드 서비스입니다.
  • DMS를 사용하면 일회성 마이그레이션을 수행할 수 있으며, 지속적인 변경 사항을 복제하여 소스와 대상을 동기화 상태로 유지할 수 있습니다.
  • 다른 데이터베이스 엔진으로 마이그레이션하려는 경우, AWS Schema Conversion Tool을 사용하여 데이터베이스 스키마를 새 플랫폼을 변환할 수 있습니다. 그런 다음 DMS를 사용하여 데이터를 마이그레이션합니다.

 

DMS에서 지원하는 데이터베이스

  Source Target
Oracle
온프레미스 / EC2 10.2 이상, 11g, 12.2 이하, 18c, 19c 10g, 11g, 12c, 18c, 19c
RDS 11g, 12.2 이하, 18c, 19c 11g, 12c, 18c, 19c
SQL Server
온프레미스 / EC2 2005, 2008, 2008 R2, 2012, 2014, 2016, 2017, 2019
RDS 2012, 2014, 2016, 2017, 2019
MySQL 온프레미스 / EC2 / RDS 5.5, 5.6, 5.7, 8.0
MariaDB
온프레미스 / EC2 / RDS MySQL 호환 데이터 원본으로 지원
PostgreSQL 온프레미스 / EC2 / RDS 9.4 이상, 10.x, 11.x, 12.x, 13.x
MongoDB 온프레미스 / EC2 3.x, 4.0, 4.2, 4.4 지원 X
SAP ASE 온프레미스 / EC2 12.5, 15, 15.5, 15.7, 16 이상 15, 15.5, 15.7, 16 이상
Aurora RDS MySQL / PostgreSQL 호환 데이터 원본으로 지원
Redshift Redshift 지원 X 지원 O
 

AWS DMS 소스 - AWSDatabase Migration Service

소스로서 MySQL 8.0에 대한 지원은AWS DMS버전 3.4.0 이상 (트랜잭션 페이로드가 압축된 경우를 제외하고)

docs.aws.amazon.com

 

AWS DMS 대상 - AWSDatabase Migration Service

대상으로서 MariaDB에 대한 지원은 MySQL이 지원되는 모든 AWS DMS 버전에서 사용할 수 있습니다.

docs.aws.amazon.com

 

 

실습

구성 아키텍처

 

MySQL Server 생성 및 구성

구성 아키텍처에 맞게 VPC와 Subnet을 생성한 후, Source VPC에 MySQL/Aurora 3306 포트를 허용하는 인스턴스를 생성합니다.
생성한 인스턴스에 접속한 후, 위의 명령어를 순서대로 입력하여 mysql을 설치 및 확인합니다.
root로 mysql에 접속한 후, 사용할 admin 사용자를 생성하고 권한을 부여합니다.
그리고 caching_sha2_password로 되어있는 인증 방식을 이전의 mysql_native_password로 변경합니다.

더보기

MySQL의 기본 인증 플러그인은 mysql_native_password였는데, 8.0 이후로 caching_sha2_password로 바뀌었습니다. 따라서 caching_sha2_password 플러그인을 사용하려면 SSL 보안 연결을 하거나, RSA 보안을 적용한 비암호 연결을 해야합니다. 하지만 이 두 가지 방법 말고 이전과 같이 접속하는 것이 쉽기 때문에 이전 플러그인으로 변경하였습니다.

 

/etc/mysql/mysql.conf.d/mysqld.cnf 파일을 열어, 외부 접속을 허용하도록 다음과 같이 변경합니다.
3306 포트로 전체 IP가 허용되었음을 확인한 후, mysql 서비스를 재시작 합니다.
생성한 admin 사용자로 다시 접속하여 데이터베이스와 테이블을 생성한 후, 데이터를 넣고 확인합니다.

 

RDS for MySQL 생성

RDS 콘솔에서 데이터베이스를 선택한 후, 데이터베이스 생성을 클릭합니다.
엔진 옵션은 MySQL, 버전은 MySQL 8.0.27를 선택합니다.
DB 인스턴스 식별자와 마스터 사용자 이름, 마스터 암호를 입력합니다.
테스트용이므로 낮은 유형으로 선택하였습니다.
마찬가지로 테스트용이기 때문에 대기 인스턴스를 생성하지 않도록 설정하였습니다.
Target VPC를 선택하고, 보안 그룹을 새로 생성합니다. 그리고 가용 영역 a를 선택한 후, 맨 아래 데이터베이스 생성을 클릭합니다.
위와 같이 데이터베이스(RDS for MySQL)가 생성된 것을 확인할 수 있습니다.

 

VPC Peering 생성 및 구성

더보기

DMS의 소스 엔드포인트와 대상 엔드포인트가 다른 VPC에 있는 경우, VPC 피어링을 사용하여 두 VPC를 연결해야 합니다.

 

VPC 콘솔에서 피어링 연결을 선택한 후, 피어링 연결 생성을 클릭하여 Source와 Target VPC를 연결합니다.
생성된 피어링 연결을 선택한 후, 작업의 요청 수락을 클릭합니다.
그리고 생성된 피어링 연결의 DNS 부분에서 DNS 설정 편집을 클릭합니다.
요청자와 수락자 DNS 확인을 활성화한 후, 변경 사항 저장을 클릭합니다.
그리고 VPC 피어링 연결을 위해, Source VPC의 Public 라우팅 테이블에서 Target VPC 트래픽을 VPC 피어링에 전달하도록 추가합니다.
마찬가지로 Target VPC의 Public 라우팅 테이블에서 Source VPC 트래픽을 VPC 피어링에 전달하도록 추가합니다.
Target VPC의 Private 라우팅 테이블에서도 Source VPC 트래픽을 VPC 피어링에 전달하도록 추가합니다.

 

DMS 생성

DMS 콘솔에서 서브넷 그룹을 선택한 후, 서브넷 그룹 생성을 클릭합니다.
복제 인스턴스의 서브넷 그룹이기 때문에 Target VPC의 프라이빗 a와 c 서브넷을 선택한 후, 서브넷 그룹 생성을 클릭합니다.
위와 같이 서브넷 그룹이 생성된 것을 확인할 수 있습니다.
다음으로 DMS의 복제 인스턴스에서 복제 인스턴스 생성을 클릭합니다.
복제 인스턴스 이름과 설명을 입력합니다.
Target VPC와 단일 AZ을 선택하고, 생성한 서브넷 그룹과 가용 영역 a를 선택합니다. 그리고 모든 트래픽을 허용하는 보안 그룹을 생성하여 선택한 후, 맨 아래 생성을 클릭합니다.
위와 같이 복제 인스턴스가 생성된 것을 확인할 수 있습니다.
다음으로 DMS의 엔드포인트에서 엔드포인트 생성을 클릭합니다.
서버 이름에 MySQL Server의 프라이빗 주소를 넣고, 각각의 정보를 입력하여 소스 엔드포인트 생성합니다.
마찬가지로 서버 이름에 RDS for MySQL의 엔드포인트를 넣고, 각각의 정보를 입력하여 대상 엔드포인트를 생성합니다.
위와 같이 소스와 대상 엔드포인트가 생성된 것을 확인할 수 있습니다.
마지막으로 DMS의 데이터베이스 마이그레이션 테스크에서 테스크 생성을 클릭합니다.
생성한 복제 인스턴스와 소스 및 대상 엔드포인트를 선택합니다.
전체 데이터 로드를 수행한 후 즉시 소스와 대상의 데이터를 비교하기 위해 검증 활성화를 체크합니다. 그리고 DMS 작업에 대한 정보를 제공하는 제어 테이블 활성화를 체크합니다.
새 선택 규칙을 선택하여 모든 스키마와 모든 테이블을 마이그레이션하도록 설정한 후, 테스크 생성을 클릭합니다.
생성된 테스크를 선택한 후, 작업에서 다시 시작/재개를 클릭하면 마이그레이션이 진행됩니다.

 

확인

테스크의 상태가 오류로 떴지만 테이블 통계 부분을 확인해보면,
생성한 테이블만 성공했고, 나머지 mysql과 performance_schema 테이블은 Root 권한이 없어 실패한 것을 확인할 수 있습니다.
RDS for MySQL에 접속하여 확인해 보면, 생성한대로 마이그레이션된 것을 확인할 수 있습니다.