본문 바로가기

개발공부/Database

MSSQL -> MySQL 데이터 마이그레이션- 4.데이터 분석

MySQL 마이그레이션: 데이터 마이그레이션 실행(Execution) 단계


🛠️ 1. 사전 준비 작업(Pre-Migration Tasks)

마이그레이션 실행 전에 반드시 다음을 준비합니다:

  1. AWS DMS 권한 확인:
    • 소스(MSSQL)타겟(MySQL) RDS 인스턴스에 필요한 권한을 부여해야 합니다.
  2. VPC 및 네트워크 구성 점검:
    • AWS DMS 인스턴스소스 DB타겟 DB에 접근할 수 있는지 확인.
  3. 성능 모니터링 설정:
    • CloudWatch를 통해 DMS 마이그레이션 성능을 실시간 모니터링하도록 설정.
  4. 백업 수행:
    • 소스 및 타겟 데이터베이스의 스냅샷을 생성.

🔐 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 인스턴스 생성

  1. AWS 콘솔DMSReplication InstancesCreate Replication Instance
  2. 사양 선택: dms.r5.large 이상 권장.
  3. VPC 선택: **소스(MSSQL)**과 **타겟(MySQL)**이 있는 VPC 선택.
  4. 퍼블릭 접근(필요 시): 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. 마이그레이션 모니터링

  1. CloudWatch Logs: 오류 로그(Error Logs) 확인.
  2. AWS DMS 콘솔 → Task Monitoring: 로드 진행률(%) 확인.
  3. 타겟 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를 통해 쿼리 성능을 모니터링합니다.

확인 포인트:

  1. Top SQLs by CPU: CPU를 가장 많이 사용하는 쿼리.
  2. InnoDB Buffer Pool: 캐싱 효율성 검토.
  3. 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 마이그레이션이 완료되었습니다! 🎉

다음 단계: 모니터링 및 성능 최적화 단계