SlideShare a Scribd company logo
Migration to Azure Database for
MySQL
rockPLACE DB기술2본부
목차
• Azure Database for MySQL Deploy
• MySQL to Azure Database for MySQL Migration
Azure Database for MySQL Deploy
Azure Database for MySQL Deploy
1. 사전 준비
1) https://portal.azure.com에 접속 및 로그인
2) 리소스 그룹 생성 (1/3)
- 왼쪽 네비게이션의 리소스 그룹 클릭 후 리소스 그룹 추가 버튼 클릭
1. 사전 준비
2) 리소스 그룹 생성 (2/3)
- 리소스 그룹을 생성하기 위한 기본정보 입력 후 리뷰+만들기 버튼 클릭
Azure Database for MySQL Deploy
1. 사전 준비
2) 리소스 그룹 생성 (3/3)
- 리소스 그룹 내용 확인 및 만들기 버튼 클릭
Azure Database for MySQL Deploy
2. Azure Database for MySQL 서버 만들기
1) MySQL Server 생성 (1/4)
- 리소스 만들기 -> 데이터베이스 클릭-> Azure Database for MySQL 클릭 -> 만들기 버튼 클릭
Azure Database for MySQL Deploy
2. Azure Database for MySQL 서버 만들기
1) MySQL Server 생성 (1/4)
- 리소스 만들기 -> 데이터베이스 클릭-> Azure Database for MySQL 클릭 -> 만들기 버튼 클릭
Azure Database for MySQL Deploy
단일 서버 와 유연한 서버가 존재하며 현재 유연한 서버의
경우 MySQL 5.7버전만 이용 가능하며 preview 버전
- 네트워크 격리(퍼블릭 액세스 + 프라이빗(Vnet) 액세스)
다음과 같은 기능을 원하는 경우 VNet 통합 옵션을 선택
• 개인 IP 주소를 사용하여 동일한 가상 네트워크의 Azure 리소스
에서 유연한 서버에 연결
• VPN 또는 ExpressRoute를 사용하여 비 Azure 리소스에서 유연
한 서버에 연결
• 비 퍼블릭 엔드포인트
- 최대 10개의 읽기 복제본을 사용하여 읽기 작업 확장(단일
서버의 경우 최대 5개)
- 서버를 중지/시작하여 비용 최적화(최대 7일간 중지가능)
2. Azure Database for MySQL 서버 만들기
1) MySQL Server 생성 (2/4)
- MySQL 서버 정보 입력 후 만들기 버튼 클릭
Parameter Name Description etc
서버 이름
Azure Database for MySQL 서버를 식별하
는 고유한 이름
소문자, 숫자 및 - 만 사용가능
구독 서버에 사용할 Azure 구독
리소스 그룹 종속될 리소스 그룹
소스 선택 신규 또는 기존 백업을 통한 서버구성
비어 있음 : 신규 서버
백업 : 기존 백업을 통한 서버구성
서버 관리자 로그인 이름 서버에 연결시 사용 할 로그인 계정
azure_superuser, admin, administrator,
root, guest 또는 public 사용 불가
암호 서버 관리자 계정의 암호
8-128자 / 다음 범주 중 세 개의 문자를 포
함해야 한다. 영문 대문자, 영문 소문자, 숫
자(0-9) 및 영숫자가 아닌 문자(!, $, #, % 등)
암호 확인 서버 관리자 계정의 암호 확인
위치 서버가 설치될 위치
버전 MySQL 버전 선택 5.6 , 5.7 , 8.0 지원하며 하위 버전 선택불가
가격 책정 계층 서버 스펙에 따른 책정 계층 선택
Azure Database for MySQL Deploy
2. Azure Database for MySQL 서버 만들기
1) MySQL Server 생성 (2/4)
- 3가지 유형의 가격책정 계층
Azure Database for MySQL Deploy
기본 범용 메모리 최적화
계산 세대 4세대, 5세대 4세대, 5세대 5세대
vCore 수 1, 2 2, 4, 8, 16, 32, 64 2, 4, 8, 16, 32
vCore 메모리 2GB 5GB 10 GB
저장소 크기 5GB-1TB 5GB-16TB 5GB-16TB
데이터베이스 백업 보존
기간
7-35일 7-35일 7-35일
2. Azure Database for MySQL 가격 책정 계층
1) 가격 책정 계층(1/2)
- Azure Database for MySQL 서버는 기본, 범용 및 메모리 최적화의 세 가지 가격 책정 계층 중 하나에서
만들 수 있습니다.
Azure Database for MySQL Deploy
가격 책정 계층 대상 워크로드
기본
간단한 계산 및 I/O 성능이 필요한 워크로드. 예를 들어 개발 또는 시험, 또는 자주
사용하지 않는 소규모 애플리케이션에 사용되는 서버가 이에 해당
범용
확장 가능한 I/O 처리량을 갖춘 부하 분산된 컴퓨팅 및 메모리가 필요한 대부분의
비즈니스 워크로드. 예를 들어 웹 및 모바일 앱을 호스트하는 서버와
기타 엔터프라이즈 애플리케이션 해당
메모리 최적화
빠른 트랜잭션 처리와 높은 동시성을 위해 메모리 내 성능이 필요한 고성능 데이터
베이스 워크로드. 예를 들어 실시간 데이터를 처리하는 서버 및 고성능 트랜잭션
또는 분석 앱
2. Azure Database for MySQL 가격 책정 계층
1) 가격 책정 계층(2/2)
- 서버를 만든 후 vCore 수, 하드웨어 생성 및 가격 책정 계층(기본 제외)은 몇 초 이내로 늘리거나 줄일 수
있으며 또한 애플리케이션 중단 시간 없이 독립적으로 스토리지 용량을 늘리거나 백업 보존 기간을 늘리거나
줄일 수 있습니다. 서버가 만들어진 후 백업 저장소 유형은 변경할 수 없습니다.
Azure Database for MySQL Deploy
2. Azure Database for MySQL 서버 만들기
1) MySQL Server 생성 (3/4)
- 만들기 이후로 배포가 진행되며 수분 이내에 완료
Azure Database for MySQL Deploy
2. Azure Database for MySQL 서버 만들기
1) MySQL Server 생성 (4/4)
- 모든 리소스 클릭 -> 리소스 그룹 선택 ->서버 이름 선택
Azure Database for MySQL Deploy
2. Azure Database for MySQL 서버 만들기
1) MySQL Server 생성 (4/4)
- 서버 기본정보 확인 및 변수 변경, 보안, 경고 구성
Azure Database for MySQL Deploy
2. Azure Database for MySQL 서버 만들기
2) MySQL Server 방화벽 생성
- Client  MySQL 서버 접근을 위해 방화벽 설정 필요
- 생성한 MySQL 서버 리소스 선택-> 연결 보안 클릭 -> 규칙 이름, Open할 Ip 주소 입력 -> 저장
Azure Database for MySQL Deploy
3. Azure Database for MySQL 서버 접속
1) MySQL Client 로 접속 (1/2)
- MySQL Client 사용을 위해서는 MySQL Client 프로그램이 설치되어 있어야 한다.
- Download URL
https://dev.mysql.com/downloads/
- 접속 명령어
Azure Database for MySQL Deploy
Parameter
Name
Description 대상
--host(-h) 서버 이름 입력 azure-test-mysql02.mysql.database.azure.com
--user(-u)
서버 관리자 로그인
이름 입력
myadmin@azure-test-mysql02
--password(-p)
서버 관리자 로그인
암호 입력
3. Azure Database for MySQL 서버 접속
1) MySQL Client 로 접속 (2/2)
- azure-test-mysql02 서비스 개요 내용 중 서버이름 , 서버 관리자 로그인 이름 확인 후 접속
Azure Database for MySQL Deploy
3. Azure Database for MySQL 서버 접속
2) MySQL Workbench GUI 접속 (1/3)
- Client 컴퓨터에서 MySQL Workbench APP을 실행
- Download URL
https://dev.mysql.com/downloads/workbench/
Azure Database for MySQL Deploy
3. Azure Database for MySQL 서버 접속
2) MySQL Workbench GUI 접속 (2/3)
- 클릭 -> Connection 정보 입력 -> Test Connection 클릭 -> Successfully made the MySQL
Connection 팝업 출력시 연결 정상 -> OK 클릭
Azure Database for MySQL Deploy
Parameter
Name
Description 대상
Connection Name 연결 이름 사용자 임의로 정의
Connection
Method
연결 방법 TCP/IP
Hostname 서버 이름 입력 azure-test-mysql02.mysql.database.azure.com
Port 포트 3306
Username
서버 관리자 로그인
이름 입력
myadmin@azure-test-mysql02
password
서버 관리자 로그인
암호 입력
Default Schema
접속시 기본 select될
Database
3. Azure Database for MySQL 서버 접속
2) MySQL Workbench GUI 접속 (3/3)
- 생성된 Connection 상자 클릭
Azure Database for MySQL Deploy
MySQL to Azure Database for MySQL Migration
MySQL to Azure Database for MySQL Migration
1. Migration 방법론
덤프 내보내기 가져오기 Azure Database Migration Service
- On-premise와 Azure의 DB를 동기화
- 가동 중지 시간의 최소화
- As-is 와 To-be의 상위 버전은 동일해야함
- MySQL 8.0으로의 마이그레이션은 지원하지 않음
1. mysqldump(mysqlpump)를 이용한 on-
premise db백업
2. mysql를 이용한 Azure로 복원
1. Azure DMS 인스턴스 생성
2. Azure DMS 프로젝트 생성
3. 마이그레이션 실행
4. 마이그레이션 중단
- DB 정합성을 위해 서비스 중지 필요
(복제 구성으로 가동 중지 시간 최소화 가능)
- 대용량 Database의 경우 성능상 지양
On-premise
MySQL
Azure for
MySQL
특징 및 주의사항특징 및 주의사항
- Azure Database for MySQL 은 InnoDB, Memory 엔진 지원
- Azure Database for MySQL 지원버전(5.6, 5.7, 8.0)
MySQL to Azure Database for MySQL Migration
1. Migration 방법론
Load Data Infile
1. Select into outfile ~ 명령을 통한 data export(이기종
DB의 경우 각 Database의 csv export명령어 사용)
2. Load Data Local Infile ~ 명령을 통한 data import
- MySQL 이외의 이기종 Database 마이그레이션 가능
- 오프라인 마이그레이션만 가능
- Import 성능은 가장 우수
- 테이블 단위로만 마이그레이션 가능
On-premise
Database
Azure for
MySQL
특징 및 주의사항
- Azure Database for MySQL 은 InnoDB, Memory 엔진 지원
- Azure Database for MySQL 지원버전(5.6, 5.7, 8.0)
MySQL to Azure Database for MySQL Migration
2-1. 덤프 내보내기 가져오기 방법 사용시 유의사항
- Azure Database for MySQL 은 InnoDB 엔진만 사용 가능하므로 소스 database에서 다른 엔진을 사용하는지 확인 후 타 엔진 사용시 먼저
소스DB에서 InnoDB 엔진으로 변환한다.
 타 엔진 사용여부 확인 쿼리
mysql>select table_schema,table_name,engine from information_schema.tables where engine <> 'innodb' and table_schema
not in('mysql','sys','information_schema','performance_schema');
 타 엔진 사용시 아래의 쿼리로 InnoDB 엔진으로 변환
mysql>alter table [TABLE_NAME] engine=innodb;
※ 수행시 테이블 리빌딩을 하므로 사이즈에 따라 시간소요가 되며 오프라인에서 수행한다.
- 데이터베이스를 덤프할 때 mysqldump에서 --skip-triggers 옵션을 사용한다. 데이터 복원 중 발생하는 트리거 명령을 방지하기 위해 덤프
파일에서 트리거를 제외한다. 마이그레이션 완료 후 서비스 시작 전 트리거를 import 시켜준다.
- single-transaction 옵션을 사용하여 트랜잭션 격리 모드를 REPEATABLE READ로 설정하고 데이터를 덤프하기 전에 START
TRANSACTION SQL 문을 서버로 보낸다. 이 옵션 사용으로 InnoDB 엔진에 한하여 lock이 발생되지 않도록 한다.
- 여러 VALUE 목록을 포함하는 extended-insert 여러 행 구문을 사용한다. 그러면 덤프 파일이 작아지고 파일을 다시 로드할 때 삽입 속도
가 빨라진다. ((Defaults to on)
MySQL to Azure Database for MySQL Migration
2-1. 덤프 내보내기 가져오기 방법 사용시 유의사항
- 데이터가 기본 키 순서로 스크립팅 되도록 데이터베이스를 덤프할 때 mysqldump에서 order-by-primary 옵션을 사용한다.
- 로드 전에 외래 키 제약 조건을 비활성화하려면 데이터를 덤프할 때 mysqldump에서 disable-keys 옵션을 사용한다. 외래 키 검사 비활성
화는 성능 향상을 제공한다. 제약 조건을 활성화하고 참조 무결성을 확인하도록 로드 후 데이터를 확인한다. (Defaults to on)
- Azure blob/저장소에 백업 파일을 복사하고, 인터넷을 통해 복원을 수행할 때보다 훨씬 더 빨리 수행할 수 있는 위치에서 복원을 수행한
다.
- 덤프 내보내기 수행시 병렬 수행을 원하는 경우 mysqlpump 툴을 사용한다. 기본적인 방법은 mysqldump와 유사하며 옵션에 약간의 차
이가 있다. (복원시는 mysqldump와 동일하게 1 thread)
- 소스DB에서 external tablespace 사용 case의 경우 복원시 error 발생. 이 경우 해당 테이블 재구성 필요.
Ex> mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/external/directory’;
- mysqldump 툴 사용시 event, trigger, stored procedure, stored function, view object의 경우 definer가 dump 파일에 기록되므로 해당
object는 툴이 아닌 매뉴얼 하게 하드카피하여 타겟 DB에 이관시킨다.
mysqlpump 툴 사용시 mysqlpump의 skip-definer 옵션을 사용하여 뷰 및 저장 프로시저에 대한 create 문에서 definer 및 SQL SECURITY
절을 생략한다. 덤프 파일을 다시 로드하면 기본 DEFINER 및 SQL SECURITY 값을 사용하는 개체가 생성된다.
- 소스와 타겟의 MySQL 버전이 8.0인 경우 기본 패스워드 인증방식이 caching_sha2_password 로 변경 되었으나 Azure database for
MySQL은 이 인증방식을 지원하지 않고 이전 인증방식인 native password 만 지원하므로 계정에 대한 이관은 AS-IS 에서 native
password 로 변경 후 덤프 내보내기&가져오기로 이관 또는 매뉴얼 작업한다.
mysqldump -uroot -p --single-transaction --routines=0 --triggers=0 --events=0 --max_allowed_packet=1024M --skip-triggers --order-
by-primary --master-data=2 employees > /tmp/employees_new.dmp
MySQL to Azure Database for MySQL Migration
2-2. 빠른 데이터 로드를 위한 유의사항
- max_allowed_packet – 긴 행으로 인한 오버플로 문제를 방지하기 위해 1073741824(예: 1GB)로 설정한다.
- Slow_query_log – 저속 쿼리 로그를 해제하려면 OFF로 설정한다. 이렇게 하면 데이터 로드 중 느린 쿼리 로깅으로 인한 오버헤드가 제거
된다.
- Query_store_capture_mode – 쿼리 저장소 해제 하려면 없음으로 설정 한다. 이렇게 하면 쿼리 저장소의 샘플링 작업으로 인한 오버헤드
가 제거된다.
- Innodb_buffer_pool_size – 마이그레이션 중에 포털의 가격 책정 계층에서 서버를 32개의 vCore 메모리 최적화 SKU로 확장하여
innodb_buffer_pool_size를 늘립니다. Innodb_buffer_pool_size는 Azure Database for MySQL 서버에 대한 컴퓨팅을 확장해야만 늘릴 수
있다.
- innodb_io_capacity & innodb_io_capacity_max-Azure Portal의 서버 매개 변수에서 9000로 변경 하 여 마이그레이션 속도를 최적화 하기
위해 IO 사용률을 향상 시킨다.
- innodb_write_io_threads & innodb_write_io_threads-마이그레이션의 속도를 개선 하기 위해 Azure Portal의 서버 매개 변수에서 4로 변
경 한다.
- 스토리지 계층 스케일 업 – 스토리지 계층이 증가함에 따라 Azure Database for MySQL 서버의 IOP가 점진적으로 증가합니다. 더 빠른 로
드를 위해 스토리지 계층을 늘려 프로비저닝된 IOP를 늘릴 수 있다. 스토리지는 축소할 수 없고 확장만 할 수 있다.
MySQL to Azure Database for MySQL Migration
2-3. Migration (mysqldump)
Azure IaaS
MySQL
Azure for
MySQL
덤프 내보내기 가져오기
① mysqldump
② replication
MySQL to Azure Database for MySQL Migration
2-3. Migration (mysqldump)
1) Source MySQL 대상 정보 확인
2) Target MySQL 대상 정보 확인
MySQL to Azure Database for MySQL Migration
2-3. Migration (mysqldump)
3) Azure for MySQL 방화벽 설정
- MySQL 서버 리소스 선택-> 연결 보안 클릭 -> 규칙 이름, Open할 Ip 주소 입력 -> 저장
MySQL to Azure Database for MySQL Migration
2-3. Migration (mysqldump)
4) Source DB 백업
- Migration 대상 Database 백업
5) Target 에 Database 생성
- 복원 대상 Database 생성
MySQL to Azure Database for MySQL Migration
2-3. Migration (mysqldump)
6) Target 복원(1/2)
- Azure for MySQL에 복원
- 복원 중 Azure for MySQL 프로세스
MySQL to Azure Database for MySQL Migration
2-3. Migration (mysqldump)
6) Target 복원(2/2)
- Azure for MySQL에 복원 확인
MySQL to Azure Database for MySQL Migration
2-3. Migration (mysqldump)
7) Source DB binary log 확인
- mysqldump 파일내의 백업 시점의 binary log 파일명과 포지션 번호를 확인
8) Source MySQL - Target MySQL replication 연결
MySQL to Azure Database for MySQL Migration
2-3. Migration (mysqldump)
9) Target DB Replication 정상 확인
MySQL to Azure Database for MySQL Migration
2-3. Migration (mysqldump)
10) 실시간 데이터 동기화 확인
MySQL to Azure Database for MySQL Migration
3-1. DMS 사용시 유의사항
- 소스DB와 타겟DB의 버전은 동일해야 한다. 예를들어 5.6->5.6 / 5.7->5.7
- MySQL 8.0으로의 마이그레이션은 지원되지 않는다.
- 원본 MySQL 버전은 5.6.35, 5.7.18 이상이어야 한다.
- Azure Database for MySQL은 다음을 지원한다.
 MySQL 커뮤니티 버전
 InnoDB 엔진
- 원본 MySQL my.ini(Windows) 또는 my.cnf(Unix)로 이진 로깅을 사용
 Server_id를 1 이상의 숫자로 설정(예: Server_id=1(MySQL 5.6에만 해당))
 log-bin = <path>로 설정(MySQL 5.6에만 해당)
 binlog_format = row로 설정
 Expire_logs_days = 5(권장됨 - MySQL 5.6에만 해당)
- 스키마 마이그레이션 전 대상 Azure Database for MySQL 에 아래 설정 추가
 log_bin_trust_function_creators = 1
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you
*might* want to use the less safe log_bin_trust_function_creators variable) 에러방지
super 권한이 없는 사용자로 routine 생성 시 발생
MySQL to Azure Database for MySQL Migration
3-1. DMS 사용시 유의사항
- 대상 Azure Database for MySQL의 스키마에는 트리거가 없어야 한다.
 대상 데이터베이스에서 트리거를 삭제하려면:
SELECT Concat('DROP TRIGGER ', Trigger_Name, ';') FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA =
'your_schema';
- 대상 Azure Database for MySQL의 스키마에는 외래 키가 없어야 한다.
 외래 키를 삭제하려면 다음 쿼리를 사용합니다.
SET group_concat_max_len = 8192;
SELECT SchemaName, GROUP_CONCAT(DropQuery SEPARATOR ';n') as DropQuery, GROUP_CONCAT(AddQuery SEPARATOR
';n') as AddQuery
FROM
(SELECT
KCU.REFERENCED_TABLE_SCHEMA as SchemaName, KCU.TABLE_NAME, KCU.COLUMN_NAME,
CONCAT('ALTER TABLE ', KCU.TABLE_NAME, ' DROP FOREIGN KEY ', KCU.CONSTRAINT_NAME) AS DropQuery,
CONCAT('ALTER TABLE ', KCU.TABLE_NAME, ' ADD CONSTRAINT ', KCU.CONSTRAINT_NAME, ' FOREIGN KEY (`',
KCU.COLUMN_NAME, '`) REFERENCES `', KCU.REFERENCED_TABLE_NAME, '` (`', KCU.REFERENCED_COLUMN_NAME, '`) ON
UPDATE ',RC.UPDATE_RULE, ' ON DELETE ',RC.DELETE_RULE) AS AddQuery
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU, information_schema.REFERENTIAL_CONSTRAINTS RC
WHERE
KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
AND KCU.REFERENCED_TABLE_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA
AND KCU.REFERENCED_TABLE_SCHEMA = 'schema_name') Queries
GROUP BY SchemaName;
MySQL to Azure Database for MySQL Migration
3-1. DMS 사용시 유의사항
- 스키마 migration시 event, stored procedure, stored function object의 경우 definer가 dump 파일에 기록되므로 Source MySQL에서
mysqldump 백업이후 dump파일내의 definer 부분을 삭제한 후 schema migration을 수행한다.
- 원본 MySQL 데이터베이스에서 JSON 데이터 형식이 있는 경우 지속적인 동기화를 수행하는 동안 마이그레이션이 실패한다.
 JSON 데이터 형식을 원본 MySQL 데이터베이스의 medium text 또는 Longtext로 수정한다.
- 테이블에 기본 키가 없는 경우 지속적인 동기화가 실패한다.
 마이그레이션을 계속할 수 있도록 일시적으로 테이블에 대한 기본 키를 설정한다. 데이터 마이그레이션이 완료된 후 기본 키를
제거할 수 있다.
- LOB 데이터 형식이 기본 키로 사용되는 경우 마이그레이션이 실패한다.
 기본 키를 다른 데이터 형식 또는 LOB가 아닌 열로 바꾼다.
- Lob (Large Object) 열의 길이가 "제한 LOB size" 매개 변수 (64 KB 보다 크지 않아야 함) 보다 큰 경우 데이터가 대상에서 잘릴 수 있다.
 이 쿼리를 사용하여 LOB 열의 길이를 확인할 수 있다.
SELECT max(length(description)) as LEN from catalog;
 lob 개체가 64 KB 보다 큰 경우 "무제한 Lob 크기 허용" 매개 변수를 사용 한다. "무제한 LOB 크기 허용" 매개 변수를 사용
하는 마이그레이션은 "LOB 크기 제한" 매개 변수를 사용 하는 마이그레이션 보다 속도가 느리다.
- Azure Database Migration Service의 각 인스턴스는 동시 마이그레이션을 위해 최대 4개의 데이터베이스를 지원한다. 또한 구독에서 지
역당 두 개의 Azure Database Migration Service 인스턴스로 제한된다. 예를 들어 마이그레이션할 40개의 데이터베이스가 있는 경우 그
중 8개만 동시에 마이그레이션할 수 있으며, 두 개의 Azure Database Migration Service 인스턴스를 만든 경우에만 마이그레이션할 수 있
다.
MySQL to Azure Database for MySQL Migration
3-2. Migration (DMS)
Azure Database Migration Service
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
1) Source MySQL 대상 정보 확인 2) Target MySQL 대상 정보 확인
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
3) Target MySQL 에 이관 대상 database 생성
4) Source MySQL 에서 이관대상인 employees database의 테이블 schema migration
 Source 백업
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
4) Source MySQL 에서 이관대상인 employees database의 테이블 schema migration
 Dump파일 수정
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
4) Source MySQL 에서 이관대상인 employees database의 테이블 schema migration
 Target MySQL log_bin_trust_function_creators OFF -> ON 변경
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
4) Source MySQL 에서 이관대상인 employees database의 테이블 schema migration
 Target 복원
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
5) Target MySQL 사전 유효성 검사
 Trigger 유무 확인
출력 결과가 없을시 Trigger가 없는 상태
출력결과 존재 시 Trigger를 별도 백업을 받은 후 마이그레이션 시작전 출력된 SQL을 통하여 삭제한다.
 외래키 유무 확인
출력 결과가 없을시 외래키가 없는 상태
출력 결과 존재 시 출력결과의 DropQuery 구문을 사
용하여 외래키를 삭제한다.
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
6) Source MySQL DMS 용 계정 생성
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
7) DMS 인스턴스 만들기
- 리소스 만들기 -> Azure Database Migration Service를 검색
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
7) DMS 인스턴스 만들기
- Azure Database Migration Service 화면에서 만들기 선택
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
7) DMS 인스턴스 만들기
- 구독, 리소스 그룹, 서비스 이름, 위치 지정 - 가격 책정 계층
온라인 마이그레이션을 위해 프리미엄 선택 -> 적용
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
7) DMS 인스턴스 만들기
- 다음: 네트워킹 클릭 - 가상 네트워크 이름 작성 -> 검토+만들기 클릭
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
7) DMS 인스턴스 만들기
- 만들기 클릭
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
8) 마이그레이션 프로젝트 만들기
- 모든 리소스 클릭 - 앞전에 생성한 DMS 인스턴스 클릭
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
8) 마이그레이션 프로젝트 만들기
- 새 마이그레이션 프로젝트 클릭
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
8) 마이그레이션 프로젝트 만들기
- 프로젝트 이름 : 임의 작성
원본 서버 유형 : MySQL 선택
대상 서버 유형 : Azure Database for MySQL 선택
활동 유형 선택 : 온라인 데이터 마이그레이션 선택
-> 저장 클릭 -> 활동 만들기 및 실행 클릭
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
8) 마이그레이션 프로젝트 만들기
- 원본 세부 정보 입력 -> 다음:대상선택 클릭
원본 서버 이름 : 원본 MySQL ip 주소 입력
서버 포트 : 원본 MySQL 포트번호 입력
사용자 이름 : 원본 MySQL로 접근할 사용자
이름 입력
암호 : 설정된 사용자에 대한 암호 입력
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
8) 마이그레이션 프로젝트 만들기
- 대상 세부 정보 입력 -> 다음: 데이터베이스 선택 클릭
대상 서버 이름 : Azure MySQL 서버이름 입력
사용자 이름 : Azure MySQL 사용자 이름 입력
암호 : 설정된 Azure MySQL 사용자에 대한 암
호 입력
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
8) 마이그레이션 프로젝트 만들기
- 대상 데이터베이스명 선택-> 다음 : 마이그레이션 설정 구성 선택
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
8) 마이그레이션 프로젝트 만들기
- LOB 데이터 크기 설정 -> 다음: 요약 클릭
LOB 개체가 64 KB 보다 큰 경우 “무제한 LOB 크기
허용" 매개 변수를 사용.
“무제한 LOB 크기 허용" 매개 변수를 사용 하는 마
이그레이션은 "LOB 크기 제한" 매개 변수를 사용
하는 마이그레이션 보다 속도가 느리므로 사전에
LOB 개체 사용여부 및 크기를 확인하여 선택한다.
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
8) 마이그레이션 프로젝트 만들기
- 작업 이름 작성 -> Start migration클릭
MySQL to Azure Database for MySQL Migration
2-2. Migration(DMS)
9) 마이그레이션 실행
- 수행 중 DMS web화면
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
9) 마이그레이션 실행
- 전체 로드 완료 후 DMS web화면
- database명 클릭 ->
증분 데이터 동기화 클릭
MySQL to Azure Database for MySQL Migration
2-2. Migration (DMS)
9) 마이그레이션 실행
- 동기화 정상 확인 -> API 중지 -> 중단 시작 클릭 -> 보류중인 변경내용 0 확인 -> 확인 클릭 -> 적용 클
릭
Thank you

More Related Content

PDF
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
PDF
MySQL/MariaDB Proxy Software Test
PDF
[2018] MySQL 이중화 진화기
PDF
MySQL GTID 시작하기
PDF
Optimizing MariaDB for maximum performance
PDF
MySQL Administrator 2021 - 네오클로바
PPTX
MySQL_MariaDB-성능개선-202201.pptx
PDF
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
MySQL/MariaDB Proxy Software Test
[2018] MySQL 이중화 진화기
MySQL GTID 시작하기
Optimizing MariaDB for maximum performance
MySQL Administrator 2021 - 네오클로바
MySQL_MariaDB-성능개선-202201.pptx
MySQL Database Architectures - InnoDB ReplicaSet & Cluster

What's hot (20)

PDF
MySQL Load Balancers - Maxscale, ProxySQL, HAProxy, MySQL Router & nginx - A ...
PDF
AWS 환경에서 MySQL BMT
DOCX
MySQL_SQL_Tunning_v0.1.3.docx
PDF
The InnoDB Storage Engine for MySQL
DOCX
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
PDF
MySQL InnoDB Cluster HA Overview & Demo
PDF
Federated Engine 실무적용사례
PPTX
Maria db 이중화구성_고민하기
PDF
MariaDB 제품 소개
PPTX
MySQL_MariaDB로의_전환_기술요소-202212.pptx
PPTX
Maxscale 소개 1.1.1
PDF
MySQL 상태 메시지 분석 및 활용
PDF
Percona Live 2022 - MySQL Architectures
PPTX
Query logging with proxysql
PDF
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
PDF
MariaDB MaxScale monitor 매뉴얼
PPT
PPTX
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
PDF
PostgreSQL Deep Internal
PDF
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
MySQL Load Balancers - Maxscale, ProxySQL, HAProxy, MySQL Router & nginx - A ...
AWS 환경에서 MySQL BMT
MySQL_SQL_Tunning_v0.1.3.docx
The InnoDB Storage Engine for MySQL
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
MySQL InnoDB Cluster HA Overview & Demo
Federated Engine 실무적용사례
Maria db 이중화구성_고민하기
MariaDB 제품 소개
MySQL_MariaDB로의_전환_기술요소-202212.pptx
Maxscale 소개 1.1.1
MySQL 상태 메시지 분석 및 활용
Percona Live 2022 - MySQL Architectures
Query logging with proxysql
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
MariaDB MaxScale monitor 매뉴얼
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
PostgreSQL Deep Internal
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
Ad

Similar to Migration to Azure Database for MySQL (20)

PDF
DB Migration to Azure Database for MySQL
PPTX
Azure Database for MySQL
PDF
DB Migration to Azure Database for PostgreSQL
PDF
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
PDF
빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)
PDF
DB Azure 서비스 클라우드 플랫폼 및 인프라
PDF
SQL Azure 실무 도입하기
PDF
SQL Server to Azure SQL Database Migration
PPTX
DB Migration to Azure Database for PostgreSQL
PDF
[AWS Migration Workshop] 데이터베이스를 AWS로 손쉽게 마이그레이션 하기
PDF
AWS 9월 웨비나 | AWS 데이터베이스 마이그레이션 서비스 활용하기
PDF
스푼라디오 일본에서 한국으로 이전하기 - 최상기 (마이쿤) :: AWS Community Day 2020
PDF
여러분의 워크로드에 적합한 AWS 데이터베이스로 손쉽게 마이그레이션하기 - 최유정 (AWS 솔루션즈 아키텍트)
PDF
관계형 데이터베이스의 새로운 패러다임 Amazon Aurora :: 김상필 :: AWS Summit Seoul 2016
PPTX
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
PDF
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA
PDF
All about Data Center Migration Session 2. EOS에 대처하는 완벽한 해답, Azure
PDF
Amazon Aurora Deep Dive (김기완) - AWS DB Day
PPTX
1711 azure-live
PDF
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
DB Migration to Azure Database for MySQL
Azure Database for MySQL
DB Migration to Azure Database for PostgreSQL
AWS DMS를 통한 오라클 DB 마이그레이션 방법 - AWS Summit Seoul 2017
빠르고 안전하게 간편한 AWS로 데이터 마이그레이션 하기::최유정 (AWS 솔루션즈아키텍트)
DB Azure 서비스 클라우드 플랫폼 및 인프라
SQL Azure 실무 도입하기
SQL Server to Azure SQL Database Migration
DB Migration to Azure Database for PostgreSQL
[AWS Migration Workshop] 데이터베이스를 AWS로 손쉽게 마이그레이션 하기
AWS 9월 웨비나 | AWS 데이터베이스 마이그레이션 서비스 활용하기
스푼라디오 일본에서 한국으로 이전하기 - 최상기 (마이쿤) :: AWS Community Day 2020
여러분의 워크로드에 적합한 AWS 데이터베이스로 손쉽게 마이그레이션하기 - 최유정 (AWS 솔루션즈 아키텍트)
관계형 데이터베이스의 새로운 패러다임 Amazon Aurora :: 김상필 :: AWS Summit Seoul 2016
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA
All about Data Center Migration Session 2. EOS에 대처하는 완벽한 해답, Azure
Amazon Aurora Deep Dive (김기완) - AWS DB Day
1711 azure-live
나에게 맞는 AWS 데이터베이스 서비스 선택하기 :: 양승도 :: AWS Summit Seoul 2016
Ad

More from rockplace (20)

PDF
MySQL InnoDB Cluster 소개
PDF
락플레이스 OpenShift Q&A 토크쇼 발표자료
PDF
JBoss EAP on Azure Workshop
PDF
MySQL operator for_kubernetes
PDF
JBoss EAP on Azure
PDF
[락플레이스] RHEL8.4 웨비나 발표자료
PDF
Azure Databases for PostgreSQL MYSQL and MariaDB
PDF
Jenkins를 활용한 Openshift CI/CD 구성
PPTX
Azure databases for PostgreSQL, MySQL and MariaDB
PDF
Red Hat Openshift Container Platform
PDF
Azure Red Hat OpenShift 를 통한 더 빠르고 쉬운 애플리케이션 구축
PDF
Azure SQL Database
PDF
Azure Databases for PostgreSQL, MySQL and MariaDB
PDF
Openshift 활용을 위한 Application의 준비, Cloud Native
PPTX
애플리케이션 최적화를 위한 컨테이너 인프라 구축
PDF
RHEL8의 새로운 기술, 그리고 SQL Server 2019와 함께하는 다양한 이점
PDF
SQL Server 2019 on RHEL Overview & Case Study
PDF
OSS DB on Azure
PDF
Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축
PDF
오픈소스와 개발환경
MySQL InnoDB Cluster 소개
락플레이스 OpenShift Q&A 토크쇼 발표자료
JBoss EAP on Azure Workshop
MySQL operator for_kubernetes
JBoss EAP on Azure
[락플레이스] RHEL8.4 웨비나 발표자료
Azure Databases for PostgreSQL MYSQL and MariaDB
Jenkins를 활용한 Openshift CI/CD 구성
Azure databases for PostgreSQL, MySQL and MariaDB
Red Hat Openshift Container Platform
Azure Red Hat OpenShift 를 통한 더 빠르고 쉬운 애플리케이션 구축
Azure SQL Database
Azure Databases for PostgreSQL, MySQL and MariaDB
Openshift 활용을 위한 Application의 준비, Cloud Native
애플리케이션 최적화를 위한 컨테이너 인프라 구축
RHEL8의 새로운 기술, 그리고 SQL Server 2019와 함께하는 다양한 이점
SQL Server 2019 on RHEL Overview & Case Study
OSS DB on Azure
Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축
오픈소스와 개발환경

Migration to Azure Database for MySQL

  • 1. Migration to Azure Database for MySQL rockPLACE DB기술2본부
  • 2. 목차 • Azure Database for MySQL Deploy • MySQL to Azure Database for MySQL Migration
  • 3. Azure Database for MySQL Deploy
  • 4. Azure Database for MySQL Deploy 1. 사전 준비 1) https://portal.azure.com에 접속 및 로그인 2) 리소스 그룹 생성 (1/3) - 왼쪽 네비게이션의 리소스 그룹 클릭 후 리소스 그룹 추가 버튼 클릭
  • 5. 1. 사전 준비 2) 리소스 그룹 생성 (2/3) - 리소스 그룹을 생성하기 위한 기본정보 입력 후 리뷰+만들기 버튼 클릭 Azure Database for MySQL Deploy
  • 6. 1. 사전 준비 2) 리소스 그룹 생성 (3/3) - 리소스 그룹 내용 확인 및 만들기 버튼 클릭 Azure Database for MySQL Deploy
  • 7. 2. Azure Database for MySQL 서버 만들기 1) MySQL Server 생성 (1/4) - 리소스 만들기 -> 데이터베이스 클릭-> Azure Database for MySQL 클릭 -> 만들기 버튼 클릭 Azure Database for MySQL Deploy
  • 8. 2. Azure Database for MySQL 서버 만들기 1) MySQL Server 생성 (1/4) - 리소스 만들기 -> 데이터베이스 클릭-> Azure Database for MySQL 클릭 -> 만들기 버튼 클릭 Azure Database for MySQL Deploy 단일 서버 와 유연한 서버가 존재하며 현재 유연한 서버의 경우 MySQL 5.7버전만 이용 가능하며 preview 버전 - 네트워크 격리(퍼블릭 액세스 + 프라이빗(Vnet) 액세스) 다음과 같은 기능을 원하는 경우 VNet 통합 옵션을 선택 • 개인 IP 주소를 사용하여 동일한 가상 네트워크의 Azure 리소스 에서 유연한 서버에 연결 • VPN 또는 ExpressRoute를 사용하여 비 Azure 리소스에서 유연 한 서버에 연결 • 비 퍼블릭 엔드포인트 - 최대 10개의 읽기 복제본을 사용하여 읽기 작업 확장(단일 서버의 경우 최대 5개) - 서버를 중지/시작하여 비용 최적화(최대 7일간 중지가능)
  • 9. 2. Azure Database for MySQL 서버 만들기 1) MySQL Server 생성 (2/4) - MySQL 서버 정보 입력 후 만들기 버튼 클릭 Parameter Name Description etc 서버 이름 Azure Database for MySQL 서버를 식별하 는 고유한 이름 소문자, 숫자 및 - 만 사용가능 구독 서버에 사용할 Azure 구독 리소스 그룹 종속될 리소스 그룹 소스 선택 신규 또는 기존 백업을 통한 서버구성 비어 있음 : 신규 서버 백업 : 기존 백업을 통한 서버구성 서버 관리자 로그인 이름 서버에 연결시 사용 할 로그인 계정 azure_superuser, admin, administrator, root, guest 또는 public 사용 불가 암호 서버 관리자 계정의 암호 8-128자 / 다음 범주 중 세 개의 문자를 포 함해야 한다. 영문 대문자, 영문 소문자, 숫 자(0-9) 및 영숫자가 아닌 문자(!, $, #, % 등) 암호 확인 서버 관리자 계정의 암호 확인 위치 서버가 설치될 위치 버전 MySQL 버전 선택 5.6 , 5.7 , 8.0 지원하며 하위 버전 선택불가 가격 책정 계층 서버 스펙에 따른 책정 계층 선택 Azure Database for MySQL Deploy
  • 10. 2. Azure Database for MySQL 서버 만들기 1) MySQL Server 생성 (2/4) - 3가지 유형의 가격책정 계층 Azure Database for MySQL Deploy
  • 11. 기본 범용 메모리 최적화 계산 세대 4세대, 5세대 4세대, 5세대 5세대 vCore 수 1, 2 2, 4, 8, 16, 32, 64 2, 4, 8, 16, 32 vCore 메모리 2GB 5GB 10 GB 저장소 크기 5GB-1TB 5GB-16TB 5GB-16TB 데이터베이스 백업 보존 기간 7-35일 7-35일 7-35일 2. Azure Database for MySQL 가격 책정 계층 1) 가격 책정 계층(1/2) - Azure Database for MySQL 서버는 기본, 범용 및 메모리 최적화의 세 가지 가격 책정 계층 중 하나에서 만들 수 있습니다. Azure Database for MySQL Deploy
  • 12. 가격 책정 계층 대상 워크로드 기본 간단한 계산 및 I/O 성능이 필요한 워크로드. 예를 들어 개발 또는 시험, 또는 자주 사용하지 않는 소규모 애플리케이션에 사용되는 서버가 이에 해당 범용 확장 가능한 I/O 처리량을 갖춘 부하 분산된 컴퓨팅 및 메모리가 필요한 대부분의 비즈니스 워크로드. 예를 들어 웹 및 모바일 앱을 호스트하는 서버와 기타 엔터프라이즈 애플리케이션 해당 메모리 최적화 빠른 트랜잭션 처리와 높은 동시성을 위해 메모리 내 성능이 필요한 고성능 데이터 베이스 워크로드. 예를 들어 실시간 데이터를 처리하는 서버 및 고성능 트랜잭션 또는 분석 앱 2. Azure Database for MySQL 가격 책정 계층 1) 가격 책정 계층(2/2) - 서버를 만든 후 vCore 수, 하드웨어 생성 및 가격 책정 계층(기본 제외)은 몇 초 이내로 늘리거나 줄일 수 있으며 또한 애플리케이션 중단 시간 없이 독립적으로 스토리지 용량을 늘리거나 백업 보존 기간을 늘리거나 줄일 수 있습니다. 서버가 만들어진 후 백업 저장소 유형은 변경할 수 없습니다. Azure Database for MySQL Deploy
  • 13. 2. Azure Database for MySQL 서버 만들기 1) MySQL Server 생성 (3/4) - 만들기 이후로 배포가 진행되며 수분 이내에 완료 Azure Database for MySQL Deploy
  • 14. 2. Azure Database for MySQL 서버 만들기 1) MySQL Server 생성 (4/4) - 모든 리소스 클릭 -> 리소스 그룹 선택 ->서버 이름 선택 Azure Database for MySQL Deploy
  • 15. 2. Azure Database for MySQL 서버 만들기 1) MySQL Server 생성 (4/4) - 서버 기본정보 확인 및 변수 변경, 보안, 경고 구성 Azure Database for MySQL Deploy
  • 16. 2. Azure Database for MySQL 서버 만들기 2) MySQL Server 방화벽 생성 - Client  MySQL 서버 접근을 위해 방화벽 설정 필요 - 생성한 MySQL 서버 리소스 선택-> 연결 보안 클릭 -> 규칙 이름, Open할 Ip 주소 입력 -> 저장 Azure Database for MySQL Deploy
  • 17. 3. Azure Database for MySQL 서버 접속 1) MySQL Client 로 접속 (1/2) - MySQL Client 사용을 위해서는 MySQL Client 프로그램이 설치되어 있어야 한다. - Download URL https://dev.mysql.com/downloads/ - 접속 명령어 Azure Database for MySQL Deploy Parameter Name Description 대상 --host(-h) 서버 이름 입력 azure-test-mysql02.mysql.database.azure.com --user(-u) 서버 관리자 로그인 이름 입력 myadmin@azure-test-mysql02 --password(-p) 서버 관리자 로그인 암호 입력
  • 18. 3. Azure Database for MySQL 서버 접속 1) MySQL Client 로 접속 (2/2) - azure-test-mysql02 서비스 개요 내용 중 서버이름 , 서버 관리자 로그인 이름 확인 후 접속 Azure Database for MySQL Deploy
  • 19. 3. Azure Database for MySQL 서버 접속 2) MySQL Workbench GUI 접속 (1/3) - Client 컴퓨터에서 MySQL Workbench APP을 실행 - Download URL https://dev.mysql.com/downloads/workbench/ Azure Database for MySQL Deploy
  • 20. 3. Azure Database for MySQL 서버 접속 2) MySQL Workbench GUI 접속 (2/3) - 클릭 -> Connection 정보 입력 -> Test Connection 클릭 -> Successfully made the MySQL Connection 팝업 출력시 연결 정상 -> OK 클릭 Azure Database for MySQL Deploy Parameter Name Description 대상 Connection Name 연결 이름 사용자 임의로 정의 Connection Method 연결 방법 TCP/IP Hostname 서버 이름 입력 azure-test-mysql02.mysql.database.azure.com Port 포트 3306 Username 서버 관리자 로그인 이름 입력 myadmin@azure-test-mysql02 password 서버 관리자 로그인 암호 입력 Default Schema 접속시 기본 select될 Database
  • 21. 3. Azure Database for MySQL 서버 접속 2) MySQL Workbench GUI 접속 (3/3) - 생성된 Connection 상자 클릭 Azure Database for MySQL Deploy
  • 22. MySQL to Azure Database for MySQL Migration
  • 23. MySQL to Azure Database for MySQL Migration 1. Migration 방법론 덤프 내보내기 가져오기 Azure Database Migration Service - On-premise와 Azure의 DB를 동기화 - 가동 중지 시간의 최소화 - As-is 와 To-be의 상위 버전은 동일해야함 - MySQL 8.0으로의 마이그레이션은 지원하지 않음 1. mysqldump(mysqlpump)를 이용한 on- premise db백업 2. mysql를 이용한 Azure로 복원 1. Azure DMS 인스턴스 생성 2. Azure DMS 프로젝트 생성 3. 마이그레이션 실행 4. 마이그레이션 중단 - DB 정합성을 위해 서비스 중지 필요 (복제 구성으로 가동 중지 시간 최소화 가능) - 대용량 Database의 경우 성능상 지양 On-premise MySQL Azure for MySQL 특징 및 주의사항특징 및 주의사항 - Azure Database for MySQL 은 InnoDB, Memory 엔진 지원 - Azure Database for MySQL 지원버전(5.6, 5.7, 8.0)
  • 24. MySQL to Azure Database for MySQL Migration 1. Migration 방법론 Load Data Infile 1. Select into outfile ~ 명령을 통한 data export(이기종 DB의 경우 각 Database의 csv export명령어 사용) 2. Load Data Local Infile ~ 명령을 통한 data import - MySQL 이외의 이기종 Database 마이그레이션 가능 - 오프라인 마이그레이션만 가능 - Import 성능은 가장 우수 - 테이블 단위로만 마이그레이션 가능 On-premise Database Azure for MySQL 특징 및 주의사항 - Azure Database for MySQL 은 InnoDB, Memory 엔진 지원 - Azure Database for MySQL 지원버전(5.6, 5.7, 8.0)
  • 25. MySQL to Azure Database for MySQL Migration 2-1. 덤프 내보내기 가져오기 방법 사용시 유의사항 - Azure Database for MySQL 은 InnoDB 엔진만 사용 가능하므로 소스 database에서 다른 엔진을 사용하는지 확인 후 타 엔진 사용시 먼저 소스DB에서 InnoDB 엔진으로 변환한다.  타 엔진 사용여부 확인 쿼리 mysql>select table_schema,table_name,engine from information_schema.tables where engine <> 'innodb' and table_schema not in('mysql','sys','information_schema','performance_schema');  타 엔진 사용시 아래의 쿼리로 InnoDB 엔진으로 변환 mysql>alter table [TABLE_NAME] engine=innodb; ※ 수행시 테이블 리빌딩을 하므로 사이즈에 따라 시간소요가 되며 오프라인에서 수행한다. - 데이터베이스를 덤프할 때 mysqldump에서 --skip-triggers 옵션을 사용한다. 데이터 복원 중 발생하는 트리거 명령을 방지하기 위해 덤프 파일에서 트리거를 제외한다. 마이그레이션 완료 후 서비스 시작 전 트리거를 import 시켜준다. - single-transaction 옵션을 사용하여 트랜잭션 격리 모드를 REPEATABLE READ로 설정하고 데이터를 덤프하기 전에 START TRANSACTION SQL 문을 서버로 보낸다. 이 옵션 사용으로 InnoDB 엔진에 한하여 lock이 발생되지 않도록 한다. - 여러 VALUE 목록을 포함하는 extended-insert 여러 행 구문을 사용한다. 그러면 덤프 파일이 작아지고 파일을 다시 로드할 때 삽입 속도 가 빨라진다. ((Defaults to on)
  • 26. MySQL to Azure Database for MySQL Migration 2-1. 덤프 내보내기 가져오기 방법 사용시 유의사항 - 데이터가 기본 키 순서로 스크립팅 되도록 데이터베이스를 덤프할 때 mysqldump에서 order-by-primary 옵션을 사용한다. - 로드 전에 외래 키 제약 조건을 비활성화하려면 데이터를 덤프할 때 mysqldump에서 disable-keys 옵션을 사용한다. 외래 키 검사 비활성 화는 성능 향상을 제공한다. 제약 조건을 활성화하고 참조 무결성을 확인하도록 로드 후 데이터를 확인한다. (Defaults to on) - Azure blob/저장소에 백업 파일을 복사하고, 인터넷을 통해 복원을 수행할 때보다 훨씬 더 빨리 수행할 수 있는 위치에서 복원을 수행한 다. - 덤프 내보내기 수행시 병렬 수행을 원하는 경우 mysqlpump 툴을 사용한다. 기본적인 방법은 mysqldump와 유사하며 옵션에 약간의 차 이가 있다. (복원시는 mysqldump와 동일하게 1 thread) - 소스DB에서 external tablespace 사용 case의 경우 복원시 error 발생. 이 경우 해당 테이블 재구성 필요. Ex> mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/external/directory’; - mysqldump 툴 사용시 event, trigger, stored procedure, stored function, view object의 경우 definer가 dump 파일에 기록되므로 해당 object는 툴이 아닌 매뉴얼 하게 하드카피하여 타겟 DB에 이관시킨다. mysqlpump 툴 사용시 mysqlpump의 skip-definer 옵션을 사용하여 뷰 및 저장 프로시저에 대한 create 문에서 definer 및 SQL SECURITY 절을 생략한다. 덤프 파일을 다시 로드하면 기본 DEFINER 및 SQL SECURITY 값을 사용하는 개체가 생성된다. - 소스와 타겟의 MySQL 버전이 8.0인 경우 기본 패스워드 인증방식이 caching_sha2_password 로 변경 되었으나 Azure database for MySQL은 이 인증방식을 지원하지 않고 이전 인증방식인 native password 만 지원하므로 계정에 대한 이관은 AS-IS 에서 native password 로 변경 후 덤프 내보내기&가져오기로 이관 또는 매뉴얼 작업한다. mysqldump -uroot -p --single-transaction --routines=0 --triggers=0 --events=0 --max_allowed_packet=1024M --skip-triggers --order- by-primary --master-data=2 employees > /tmp/employees_new.dmp
  • 27. MySQL to Azure Database for MySQL Migration 2-2. 빠른 데이터 로드를 위한 유의사항 - max_allowed_packet – 긴 행으로 인한 오버플로 문제를 방지하기 위해 1073741824(예: 1GB)로 설정한다. - Slow_query_log – 저속 쿼리 로그를 해제하려면 OFF로 설정한다. 이렇게 하면 데이터 로드 중 느린 쿼리 로깅으로 인한 오버헤드가 제거 된다. - Query_store_capture_mode – 쿼리 저장소 해제 하려면 없음으로 설정 한다. 이렇게 하면 쿼리 저장소의 샘플링 작업으로 인한 오버헤드 가 제거된다. - Innodb_buffer_pool_size – 마이그레이션 중에 포털의 가격 책정 계층에서 서버를 32개의 vCore 메모리 최적화 SKU로 확장하여 innodb_buffer_pool_size를 늘립니다. Innodb_buffer_pool_size는 Azure Database for MySQL 서버에 대한 컴퓨팅을 확장해야만 늘릴 수 있다. - innodb_io_capacity & innodb_io_capacity_max-Azure Portal의 서버 매개 변수에서 9000로 변경 하 여 마이그레이션 속도를 최적화 하기 위해 IO 사용률을 향상 시킨다. - innodb_write_io_threads & innodb_write_io_threads-마이그레이션의 속도를 개선 하기 위해 Azure Portal의 서버 매개 변수에서 4로 변 경 한다. - 스토리지 계층 스케일 업 – 스토리지 계층이 증가함에 따라 Azure Database for MySQL 서버의 IOP가 점진적으로 증가합니다. 더 빠른 로 드를 위해 스토리지 계층을 늘려 프로비저닝된 IOP를 늘릴 수 있다. 스토리지는 축소할 수 없고 확장만 할 수 있다.
  • 28. MySQL to Azure Database for MySQL Migration 2-3. Migration (mysqldump) Azure IaaS MySQL Azure for MySQL 덤프 내보내기 가져오기 ① mysqldump ② replication
  • 29. MySQL to Azure Database for MySQL Migration 2-3. Migration (mysqldump) 1) Source MySQL 대상 정보 확인 2) Target MySQL 대상 정보 확인
  • 30. MySQL to Azure Database for MySQL Migration 2-3. Migration (mysqldump) 3) Azure for MySQL 방화벽 설정 - MySQL 서버 리소스 선택-> 연결 보안 클릭 -> 규칙 이름, Open할 Ip 주소 입력 -> 저장
  • 31. MySQL to Azure Database for MySQL Migration 2-3. Migration (mysqldump) 4) Source DB 백업 - Migration 대상 Database 백업 5) Target 에 Database 생성 - 복원 대상 Database 생성
  • 32. MySQL to Azure Database for MySQL Migration 2-3. Migration (mysqldump) 6) Target 복원(1/2) - Azure for MySQL에 복원 - 복원 중 Azure for MySQL 프로세스
  • 33. MySQL to Azure Database for MySQL Migration 2-3. Migration (mysqldump) 6) Target 복원(2/2) - Azure for MySQL에 복원 확인
  • 34. MySQL to Azure Database for MySQL Migration 2-3. Migration (mysqldump) 7) Source DB binary log 확인 - mysqldump 파일내의 백업 시점의 binary log 파일명과 포지션 번호를 확인 8) Source MySQL - Target MySQL replication 연결
  • 35. MySQL to Azure Database for MySQL Migration 2-3. Migration (mysqldump) 9) Target DB Replication 정상 확인
  • 36. MySQL to Azure Database for MySQL Migration 2-3. Migration (mysqldump) 10) 실시간 데이터 동기화 확인
  • 37. MySQL to Azure Database for MySQL Migration 3-1. DMS 사용시 유의사항 - 소스DB와 타겟DB의 버전은 동일해야 한다. 예를들어 5.6->5.6 / 5.7->5.7 - MySQL 8.0으로의 마이그레이션은 지원되지 않는다. - 원본 MySQL 버전은 5.6.35, 5.7.18 이상이어야 한다. - Azure Database for MySQL은 다음을 지원한다.  MySQL 커뮤니티 버전  InnoDB 엔진 - 원본 MySQL my.ini(Windows) 또는 my.cnf(Unix)로 이진 로깅을 사용  Server_id를 1 이상의 숫자로 설정(예: Server_id=1(MySQL 5.6에만 해당))  log-bin = <path>로 설정(MySQL 5.6에만 해당)  binlog_format = row로 설정  Expire_logs_days = 5(권장됨 - MySQL 5.6에만 해당) - 스키마 마이그레이션 전 대상 Azure Database for MySQL 에 아래 설정 추가  log_bin_trust_function_creators = 1 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) 에러방지 super 권한이 없는 사용자로 routine 생성 시 발생
  • 38. MySQL to Azure Database for MySQL Migration 3-1. DMS 사용시 유의사항 - 대상 Azure Database for MySQL의 스키마에는 트리거가 없어야 한다.  대상 데이터베이스에서 트리거를 삭제하려면: SELECT Concat('DROP TRIGGER ', Trigger_Name, ';') FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = 'your_schema'; - 대상 Azure Database for MySQL의 스키마에는 외래 키가 없어야 한다.  외래 키를 삭제하려면 다음 쿼리를 사용합니다. SET group_concat_max_len = 8192; SELECT SchemaName, GROUP_CONCAT(DropQuery SEPARATOR ';n') as DropQuery, GROUP_CONCAT(AddQuery SEPARATOR ';n') as AddQuery FROM (SELECT KCU.REFERENCED_TABLE_SCHEMA as SchemaName, KCU.TABLE_NAME, KCU.COLUMN_NAME, CONCAT('ALTER TABLE ', KCU.TABLE_NAME, ' DROP FOREIGN KEY ', KCU.CONSTRAINT_NAME) AS DropQuery, CONCAT('ALTER TABLE ', KCU.TABLE_NAME, ' ADD CONSTRAINT ', KCU.CONSTRAINT_NAME, ' FOREIGN KEY (`', KCU.COLUMN_NAME, '`) REFERENCES `', KCU.REFERENCED_TABLE_NAME, '` (`', KCU.REFERENCED_COLUMN_NAME, '`) ON UPDATE ',RC.UPDATE_RULE, ' ON DELETE ',RC.DELETE_RULE) AS AddQuery FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU, information_schema.REFERENTIAL_CONSTRAINTS RC WHERE KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME AND KCU.REFERENCED_TABLE_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA AND KCU.REFERENCED_TABLE_SCHEMA = 'schema_name') Queries GROUP BY SchemaName;
  • 39. MySQL to Azure Database for MySQL Migration 3-1. DMS 사용시 유의사항 - 스키마 migration시 event, stored procedure, stored function object의 경우 definer가 dump 파일에 기록되므로 Source MySQL에서 mysqldump 백업이후 dump파일내의 definer 부분을 삭제한 후 schema migration을 수행한다. - 원본 MySQL 데이터베이스에서 JSON 데이터 형식이 있는 경우 지속적인 동기화를 수행하는 동안 마이그레이션이 실패한다.  JSON 데이터 형식을 원본 MySQL 데이터베이스의 medium text 또는 Longtext로 수정한다. - 테이블에 기본 키가 없는 경우 지속적인 동기화가 실패한다.  마이그레이션을 계속할 수 있도록 일시적으로 테이블에 대한 기본 키를 설정한다. 데이터 마이그레이션이 완료된 후 기본 키를 제거할 수 있다. - LOB 데이터 형식이 기본 키로 사용되는 경우 마이그레이션이 실패한다.  기본 키를 다른 데이터 형식 또는 LOB가 아닌 열로 바꾼다. - Lob (Large Object) 열의 길이가 "제한 LOB size" 매개 변수 (64 KB 보다 크지 않아야 함) 보다 큰 경우 데이터가 대상에서 잘릴 수 있다.  이 쿼리를 사용하여 LOB 열의 길이를 확인할 수 있다. SELECT max(length(description)) as LEN from catalog;  lob 개체가 64 KB 보다 큰 경우 "무제한 Lob 크기 허용" 매개 변수를 사용 한다. "무제한 LOB 크기 허용" 매개 변수를 사용 하는 마이그레이션은 "LOB 크기 제한" 매개 변수를 사용 하는 마이그레이션 보다 속도가 느리다. - Azure Database Migration Service의 각 인스턴스는 동시 마이그레이션을 위해 최대 4개의 데이터베이스를 지원한다. 또한 구독에서 지 역당 두 개의 Azure Database Migration Service 인스턴스로 제한된다. 예를 들어 마이그레이션할 40개의 데이터베이스가 있는 경우 그 중 8개만 동시에 마이그레이션할 수 있으며, 두 개의 Azure Database Migration Service 인스턴스를 만든 경우에만 마이그레이션할 수 있 다.
  • 40. MySQL to Azure Database for MySQL Migration 3-2. Migration (DMS) Azure Database Migration Service
  • 41. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 1) Source MySQL 대상 정보 확인 2) Target MySQL 대상 정보 확인
  • 42. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 3) Target MySQL 에 이관 대상 database 생성 4) Source MySQL 에서 이관대상인 employees database의 테이블 schema migration  Source 백업
  • 43. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 4) Source MySQL 에서 이관대상인 employees database의 테이블 schema migration  Dump파일 수정
  • 44. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 4) Source MySQL 에서 이관대상인 employees database의 테이블 schema migration  Target MySQL log_bin_trust_function_creators OFF -> ON 변경
  • 45. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 4) Source MySQL 에서 이관대상인 employees database의 테이블 schema migration  Target 복원
  • 46. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 5) Target MySQL 사전 유효성 검사  Trigger 유무 확인 출력 결과가 없을시 Trigger가 없는 상태 출력결과 존재 시 Trigger를 별도 백업을 받은 후 마이그레이션 시작전 출력된 SQL을 통하여 삭제한다.  외래키 유무 확인 출력 결과가 없을시 외래키가 없는 상태 출력 결과 존재 시 출력결과의 DropQuery 구문을 사 용하여 외래키를 삭제한다.
  • 47. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 6) Source MySQL DMS 용 계정 생성
  • 48. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 7) DMS 인스턴스 만들기 - 리소스 만들기 -> Azure Database Migration Service를 검색
  • 49. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 7) DMS 인스턴스 만들기 - Azure Database Migration Service 화면에서 만들기 선택
  • 50. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 7) DMS 인스턴스 만들기 - 구독, 리소스 그룹, 서비스 이름, 위치 지정 - 가격 책정 계층 온라인 마이그레이션을 위해 프리미엄 선택 -> 적용
  • 51. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 7) DMS 인스턴스 만들기 - 다음: 네트워킹 클릭 - 가상 네트워크 이름 작성 -> 검토+만들기 클릭
  • 52. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 7) DMS 인스턴스 만들기 - 만들기 클릭
  • 53. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 8) 마이그레이션 프로젝트 만들기 - 모든 리소스 클릭 - 앞전에 생성한 DMS 인스턴스 클릭
  • 54. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 8) 마이그레이션 프로젝트 만들기 - 새 마이그레이션 프로젝트 클릭
  • 55. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 8) 마이그레이션 프로젝트 만들기 - 프로젝트 이름 : 임의 작성 원본 서버 유형 : MySQL 선택 대상 서버 유형 : Azure Database for MySQL 선택 활동 유형 선택 : 온라인 데이터 마이그레이션 선택 -> 저장 클릭 -> 활동 만들기 및 실행 클릭
  • 56. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 8) 마이그레이션 프로젝트 만들기 - 원본 세부 정보 입력 -> 다음:대상선택 클릭 원본 서버 이름 : 원본 MySQL ip 주소 입력 서버 포트 : 원본 MySQL 포트번호 입력 사용자 이름 : 원본 MySQL로 접근할 사용자 이름 입력 암호 : 설정된 사용자에 대한 암호 입력
  • 57. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 8) 마이그레이션 프로젝트 만들기 - 대상 세부 정보 입력 -> 다음: 데이터베이스 선택 클릭 대상 서버 이름 : Azure MySQL 서버이름 입력 사용자 이름 : Azure MySQL 사용자 이름 입력 암호 : 설정된 Azure MySQL 사용자에 대한 암 호 입력
  • 58. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 8) 마이그레이션 프로젝트 만들기 - 대상 데이터베이스명 선택-> 다음 : 마이그레이션 설정 구성 선택
  • 59. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 8) 마이그레이션 프로젝트 만들기 - LOB 데이터 크기 설정 -> 다음: 요약 클릭 LOB 개체가 64 KB 보다 큰 경우 “무제한 LOB 크기 허용" 매개 변수를 사용. “무제한 LOB 크기 허용" 매개 변수를 사용 하는 마 이그레이션은 "LOB 크기 제한" 매개 변수를 사용 하는 마이그레이션 보다 속도가 느리므로 사전에 LOB 개체 사용여부 및 크기를 확인하여 선택한다.
  • 60. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 8) 마이그레이션 프로젝트 만들기 - 작업 이름 작성 -> Start migration클릭
  • 61. MySQL to Azure Database for MySQL Migration 2-2. Migration(DMS) 9) 마이그레이션 실행 - 수행 중 DMS web화면
  • 62. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 9) 마이그레이션 실행 - 전체 로드 완료 후 DMS web화면 - database명 클릭 -> 증분 데이터 동기화 클릭
  • 63. MySQL to Azure Database for MySQL Migration 2-2. Migration (DMS) 9) 마이그레이션 실행 - 동기화 정상 확인 -> API 중지 -> 중단 시작 클릭 -> 보류중인 변경내용 0 확인 -> 확인 클릭 -> 적용 클 릭