MySQL 마이그레이션: 데이터 마이그레이션 실행(Execution) 단계
🛠️ 1. 사전 준비 작업(Pre-Migration Tasks)
마이그레이션 실행 전에 반드시 다음을 준비합니다:
- AWS DMS 권한 확인:
- 소스(MSSQL) 및 타겟(MySQL) RDS 인스턴스에 필요한 권한을 부여해야 합니다.
- VPC 및 네트워크 구성 점검:
- AWS DMS 인스턴스가 소스 DB와 타겟 DB에 접근할 수 있는지 확인.
- 성능 모니터링 설정:
- CloudWatch를 통해 DMS 마이그레이션 성능을 실시간 모니터링하도록 설정.
- 백업 수행:
- 소스 및 타겟 데이터베이스의 스냅샷을 생성.
🔐 1-1. IAM 정책 구성
AWS DMS에 필요한 최소 권한을 IAM 역할에 할당해야 합니다.
IAM 정책 예제:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dms:*",
"rds:DescribeDBInstances",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups",
"cloudwatch:PutMetricData",
"s3:PutObject",
"s3:GetObject"
],
"Resource": "*"
}
]
}
AWS 콘솔 → IAM → 정책 생성 → 위 정책 적용 후 **DMS 역할(Role)**에 할당.
⚙️ 2. AWS DMS 작업 생성 및 구성
AWS DMS(Database Migration Service)를 사용하여 마이그레이션을 실행합니다.
🛠️ 2-1. AWS DMS 인스턴스 생성
- AWS 콘솔 → DMS → Replication Instances → Create Replication Instance
- 사양 선택: dms.r5.large 이상 권장.
- VPC 선택: **소스(MSSQL)**과 **타겟(MySQL)**이 있는 VPC 선택.
- 퍼블릭 접근(필요 시): Enable Public Access 설정.
📍 권장 설정:
- 스토리지: 최소 100GB(대규모 데이터의 경우).
- 멀티 AZ: 장시간 마이그레이션 시 활성화.
📡 2-2. 데이터 소스 및 타겟 엔드포인트 설정
📍 소스 엔드포인트(MSSQL)
- 엔드포인트 유형: 소스(Source)
- 엔드포인트 엔진: SQL Server
- 엔드포인트 이름: mssql-source
- 서버 이름: mssql-rds-endpoint.rds.amazonaws.com
- 포트: 1433
- 데이터베이스 이름: source_db_name
- 인증 정보: MSSQL 계정(username/password)
✅ 테스트 연결 → Success 확인.
🛠️ 타겟 엔드포인트(MySQL)
- 엔드포인트 유형: 타겟(Target)
- 엔드포인트 엔진: MySQL
- 엔드포인트 이름: mysql-target
- 서버 이름: mysql-rds-endpoint.rds.amazonaws.com
- 포트: 3306
- 데이터베이스 이름: target_db_name
- 인증 정보: MySQL 계정(username/password)
✅ 테스트 연결 → Success 확인.
🔄 3. 마이그레이션 작업(Task) 생성
🛠️ 3-1. 마이그레이션 유형 선택
옵션 설명 사용 시점
Full Load | 초기 데이터 전체 로드(스냅샷) | 마이그레이션 초기 |
Full Load + CDC | 초기 로드 + 변경 데이터 지속 동기화 | 다운타임 최소화 필요 |
CDC(Change Data Capture) | 변경 데이터만 동기화 | 소스 DB와 타겟 DB 동기화 필요 시 |
권장 모드: Full Load + CDC (다운타임 최소화 및 데이터 정합성 확보)
⚙️ 3-2. 고급 설정
- LOB(Large Object) 모드: Limited LOB 또는 Full LOB 선택.
- 테이블 병렬 처리: 병렬 로드 설정하여 성능 최적화.
- 타겟 테이블 옵션: Truncate Table 활성화(기존 데이터 제거 후 로드).
💡 권장 설정:
- BatchApplyEnabled: 활성화(성능 개선).
- ParallelLoadThreads: 4 이상 설정.
🚚 4. 마이그레이션 실행(Execution)
🔴 4-1. DMS 작업 실행 및 모니터링
AWS 콘솔에서 DMS Task를 실행 후 CloudWatch Logs로 진행 상황을 모니터링합니다.
bash
# AWS CLI를 통한 마이그레이션 작업 시작
aws dms start-replication-task --replication-task-arn arn:aws:dms:<region>:<account>:task:<task_id> --start-replication-task-type start-replication
🔍 4-2. 마이그레이션 모니터링
- CloudWatch Logs: 오류 로그(Error Logs) 확인.
- AWS DMS 콘솔 → Task Monitoring: 로드 진행률(%) 확인.
- 타겟 DB 검증: MySQL에서 데이터 정합성 확인.
📊 주요 지표 확인:
- FullLoadThroughputRowsTarget (초당 로드된 행 수)
- CDCIncomingChanges (소스 변경 사항 수신 여부)
🧪 5. 데이터 정합성 검증(Post-Migration Validation)
마이그레이션 완료 후 데이터 일관성과 정확성을 확인합니다.
✅ 5-1. 데이터 수량 검증
SQL 쿼리로 레코드 수 비교:
-- MSSQL
SELECT COUNT(*) AS MSSQL_COUNT FROM source_table;
-- MySQL
SELECT COUNT(*) AS MYSQL_COUNT FROM target_table;
⚠️ 주의: CDC 모드에서 실시간 동기화 중일 경우 수량 오차 가능성 존재.
🧩 5-2. 샘플 데이터 검증
무작위 샘플 데이터를 조회하여 내용이 일치하는지 확인합니다.
-- MSSQL
SELECT TOP 5 id, name, created_at FROM source_table ORDER BY NEWID();
-- MySQL
SELECT id, name, created_at FROM target_table ORDER BY RAND() LIMIT 5;
🛠️ 5-3. 무결성 제약 조건 검증
외래키(FK) 및 UNIQUE INDEX 설정을 검토합니다.
-- MySQL: 제약 조건 조회
SELECT CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE
FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = 'target_db';
🔍 6. 성능 튜닝 및 최적화(Performance Tuning)
마이그레이션 이후 MySQL 성능을 최적화합니다.
⚙️ 6-1. 인덱스 최적화
MySQL은 인덱스를 완전히 다르게 처리하므로 인덱스 전략을 재검토해야 합니다.
-- 인덱스 확인
SHOW INDEX FROM target_table;
💡 팁: MySQL 8.x 이상 버전은 Invisible Index를 통해 테스트 모드에서 인덱스를 비활성화/활성화 가능.
⚙️ 6-2. MySQL 설정 조정
- innodb_buffer_pool_size: 전체 메모리의 70%까지 설정(OLTP 환경)
- query_cache_type: 최신 MySQL 버전에서는 제거됨 → 애플리케이션 캐싱 검토.
- max_connections: 예상 동시 연결 수에 따라 조정.
설정 변경 예시:
SET GLOBAL innodb_buffer_pool_size = 4G;
SET GLOBAL max_connections = 500;
📊 6-3. CloudWatch로 MySQL 성능 모니터링
AWS RDS → Performance Insights를 통해 쿼리 성능을 모니터링합니다.
확인 포인트:
- Top SQLs by CPU: CPU를 가장 많이 사용하는 쿼리.
- InnoDB Buffer Pool: 캐싱 효율성 검토.
- Replication Lag: CDC 모드 사용 시 필수 확인.
🚧 7. 마이그레이션 완료 후 후속 작업(Post-Migration Tasks)
마이그레이션 작업이 완료된 후 다음과 같은 후속 작업을 진행합니다.
✅ 7-1. 애플리케이션 연결 변경
JPA 설정 변경(Java):
//yaml
spring:
// DB정보 입력
datasource:
url: jdbc:mysql://mysql-rds-endpoint.rds.amazonaws.com:3306/target_db
username: <USER>
password: <PASSWORD>
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database-platform: org.hibernate.dialect.MySQL8Dialect
hibernate:
ddl-auto: none
properties:
hibernate:
format_sql: true
use_sql_comments: true
show_sql: true
🔍 7-2. 애플리케이션 테스트
- CRUD 연산 수행 테스트
- 트랜잭션 성능 및 응답 시간 확인
- AWS Lambda와 연동된 S3 URL 단축 기능 정상 동작 확인
🚨 7-3. 보안 및 백업 설정
- AWS RDS 보안 그룹(Security Group) 검토(불필요한 IP 접근 제한).
- AWS RDS 자동 백업 주기 설정.
- AWS DMS 마이그레이션 로그 보관 및 분석.
🛑 7-4. 마이그레이션 성공 기준 확인
구분 검토 항목 검토 결과(✔/❌)
데이터 일관성 | 소스/타겟 데이터 수량 동일 | ✅ |
애플리케이션 동작 | JPA 쿼리 정상 수행 | ✅ |
성능 검증 | MySQL 쿼리 성능 개선 확인 | ✅ |
보안 점검 | DB 접근제어 및 암호화 확인 | ✅ |
🎯 최종 점검: 마이그레이션 성공 여부 확인
모든 단계 완료 후, 다음 명령으로 MySQL DB 최종 데이터를 점검합니다:
-- 최종 데이터 정합성 확인
SELECT COUNT(*) FROM employees;
SELECT * FROM employees ORDER BY id DESC LIMIT 10;
이제 AWS RDS MSSQL → MySQL 마이그레이션이 완료되었습니다! 🎉
다음 단계: 모니터링 및 성능 최적화 단계
'개발공부 > Database' 카테고리의 다른 글
AWS RDS를 MSSQL 에서 MYSQL로 마이그레이션하면 비용절감 (0) | 2025.02.18 |
---|---|
MSSQL -> MySQL 데이터 마이그레이션- 5.모니터링 및 성능 최적화 단계 (0) | 2025.02.17 |
MSSQL -> MySQL 데이터 마이그레이션- 2.데이터 분석 (0) | 2025.02.17 |
MSSQL -> MySQL 데이터 마이그레이션- 1.계획 (0) | 2025.02.14 |
Data 마이그레이션 이란? (0) | 2025.02.14 |