일반적인 문제

Prev Next

Database Migration Service를 이용하면서 다음과 같은 문제를 겪을 수 있습니다. 문제별 원인과 해결 방법을 확인하고 적절하게 조치해 주십시오.

마이그레이션 오류

Test Connection 및 마이그레이션이 실패하였습니다.

원인

  • Source DB에 Database가 없습니다.
  • Target DB에 Source DB와 동일한 Database 이름이 존재합니다.
  • 마이그레이션에 필요한 권한이 설정되지 않았습니다.
  • Source DB에 적용해야 하는 설정이 적용되지 않았습니다.
  • MyISAM, BLACKHOLE, FEDERATED, ARCHIVE 엔진은 지원하지 않습니다.
  • Source DB와 Target DB의 캐릭터셋이 다릅니다.
  • 서비스 중인 클러스터를 Target DB로 지정했습니다.

해결 방법

  • Source DB에 최소한 1개 이상의 Database가 있는지 확인해 주십시오.
  • 중복된 Database는 삭제해 주십시오.
  • Source DB가 GTID 모드인지 확인해 주십시오. 마이그레이션에 필요한 권한 항목은 마이그레이션을 위해 필요한 최소 권한 항목을 참조해 주십시오.
  • Source DB에 다음과 같은 설정이 적용되었는지 확인해 주십시오.
    • 바이너리 로그를 활성화하며 server_id 값을 지정해 주십시오.
    • log_bin의 값이 ON으로 표시되는지 확인해 주십시오
    • Source DB 복제에 필요한 사전 준비에 대한 설명은 사전 준비를 참조해 주십시오.
  • 지원하지 않는 MySQL 엔진을 선택한 것은 아닌지 확인해 주십시오. Source DB의 상세 설정에 따른 지원 여부는 지원 데이터베이스를 참조해 주십시오.
  • 마이그레이션 시 지원하는 캐릭터셋은 utf8, utf8mb4, euckr입니다. 캐릭터셋이 다를 경우, Source DB의 DB 및 Table 캐릭터셋을 변경한 후 마이그레이션을 진행해 주십시오.
  • 마이그레이션 진행 시 Target DB는 다시 시작되며 데이터 읽기만 가능합니다. 서비스 중인 클러스터는 Target DB로 지정하지 않도록 주의해 주십시오.

마이그레이션 미완료

마이그레이션 실행 단계가 Replication까지 모두 완료됐으나 Cloud DB for MySQL 콘솔에서는 '마이그레이션' 상태로 표시됩니다.

원인

Migration Completed (Replication 완료) 단계인 경우 콘솔에서 [완료] 버튼을 클릭해야 최종적으로 DB 서비스 이전이 가능합니다.

해결 방법

'Migration Completed' 상태인지 확인한 후, [완료] 버튼을 클릭해 주십시오.

MariaDB 마이그레이션

MariaDB 마이그레이션 시 호환성 관련 오류 메시지가 나타납니다.

원인

Source DB가 MariaDB인 경우도 마이그레이션이 가능합니다. 단, 지원이 종료된(EOL) MariaDB 버전은 마이그레이션 과정에서 호환성 관련 오류 메시지가 발생할 수 있습니다.

해결 방법

동일한 오류가 계속 발생하는 경우, Target DB를 MySQL 5.7 버전으로 변경해 마이그레이션을 진행하거나 Source DB의 버전을 변경해 주십시오.

Source DB에 설정된 Definer 계정 마이그레이션 오류

마이그레이션할 때 Source DB에 설정된 Definer 계정이 생성되지 않았습니다.

원인

사용자 계정은 마이그레이션 대상에 포함되지 않습니다.

해결 방법

Definer에 사용된 계정을 Target DB에서 직접 생성해 주십시오. 자세한 내용은 DB User 관리를 참조해 주십시오.

DB Config 설정이 마이그레이션되지 않음

DB Config 설정이 마이그레이션되지 않았습니다.

원인

DB Config 설정에 대한 마이그레이션은 지원하지 않습니다.

해결 방법

사전에 Character Set/Collation 등 Target DB 상에서 Source DB와 동일하게 설정해 주십시오.

Test Connection 지연

Test Connection 소요 시간이 오래 걸립니다.

원인

Source DB의 스키마 개수가 많으면 수분 가량의 시간이 소요될 수 있습니다. 이는 마이그레이션 정상 진행을 위한 권한 체크, 스키마 점검 등의 과정입니다.

해결 방법

오류 상황이 아니므로 별도로 조치할 사항이 없습니다. 새로 고침 시 점검이 초기화되므로 새로고침하지 않도록 주의해 주십시오.

"Killed $RESTORECMD" 오류 메시지

Backup 타입: mydumper 사용 시 'Killed $RESTORECMD' 오류 창이 나타납니다.

원인

마이그레이션 대상 테이블의 크기가 클 경우, Thread 제한 개수를 높게 설정할수록 Importing 진행 시 메모리 사용률이 증가하여 OOM Kill / 서버 행 발생 확률이 증가합니다.

해결 방법

마이그레이션을 삭제한 후, Thread 제한값을 낮춰 재시도해 주십시오.

권한 오류

  • GRANT REPLICATION SLAVE ON . TO '계정명'@'허용호스트'; 실행 시 오류가 발생합니다. 또한 [28000][1045] Access denied for user '계정명'@'허용호스트' 메시지가 나타납니다.
  • Replication 단계에서 Master command COM_REGISTER_SLAVE failed: Access denied for user '계정명'@'허용호스트' (using password: YES) (Errno: 1045) 오류 메시지가 나타납니다.

원인

  • 접속한 계정의 권한에 문제가 있을 경우, 오류가 발생할 수 있습니다.
  • 계정에 Replication을 위한 권한이 존재하지 않을 경우, 오류가 발생할 수 있습니다.

해결 방법

접속한 계정의 권한을 확인해 주십시오. 해당 명령어를 실행하려면 작업을 수행하는 계정이 GRANT REPLICATION SLAVE*.* TO '계정명'@'허용호스트' WITH GRANT OPTION ; 권한을 보유하고 있어야 합니다. 해당 권한은 DDL 권한으로, 콘솔에서 생성된 계정에 한해서만 부여하고 있습니다.

REPLICATION 권한 부여

  1. Source DB 상에서 다음 명령어를 입력하여 REPLICATION SLAVE 권한 여부를 확인해주십시오.
    show grants for '계정명'@'허용호스트';`
    
  2. Source DB 의 계정에 REPLICATION SLAVE 권한을 부여해 주십시오.
    GRANT REPLICATION SLAVE ON *.* TO '계정명'@'허용호스트';`
    

일부 데이터베이스 마이그레이션 시 유의사항

일부 데이터베이스만 대상으로 마이그레이션을 진행할 경우, 특정 Cross-Database SQL 연산이 복제되지 않거나 실행 시 오류가 발생할 수 있습니다.
데이터 정합성 문제나 마이그레이션 이후 실행 오류를 방지하기 위해 아래 내용을 참고하여 애플리케이션 로직을 점검해 주십시오.

원인

Cross-DB SQL을 사용하는 경우, 마이그레이션 대상에 포함되지 않은 데이터베이스로 인해 실행 시 오류가 발생할 수 있습니다.

해결 방법

Cross-DB SQL을 사용하는 경우, 관련된 모든 데이터베이스를 마이그레이션 대상에 포함해 주십시오.

  1. 테스트 환경

    • 마이그레이션 대상 DB: mig-db
    • 마이그레이션 제외 DB: non-mig-db
    • 복제 필터 예시는 다음과 같습니다.
    REPLICATE_WILD_IGNORE_TABLE = ('mysql.*', 'non-mig-db.*')
    
  2. 복제 동작 기준
    SQL 유형에 따라 복제 여부가 달라지므로, 아래 기준을 참고해 주십시오.

    구분 복제 여부 결정 기준 설명
    DML (INSERT/UPDATE/DELETE) 대상 테이블(DB) 기준 대상 테이블이 복제 대상 DB에 포함되면 복제됨
    DDL (CREATE/ALTER/DROP) 대상 객체(DB) 기준 생성/수정/삭제되는 객체가 복제 대상 DB에 포함되면 복제됨
    프로시저/함수/뷰 정의 위치(DB) 기준 복제 대상 DB에 정의된 경우 복제됨
    Cross-DB 연산 실행 시 오류 발생 가능 복제는 되지만 제외 DB가 없으면 실행 오류 발생 가능
  3. 주요 사례

참고

복제되지 않음은 복제 오류가 아닌, 복제 대상 DB에서 제외된 경우입니다.

3.1. DML (데이터 조작)

SQL 예시 복제 여부
USE mig-db; INSERT INTO non-mig-db.table 복제되지 않음
USE non-mig-db; INSERT INTO mig-db.table 복제됨
USE mig-db; DELETE FROM mig-db.orders JOIN non-mig-db.table 일부 실패 가능 (non-mig-db 접근 오류)
주의
  • 제외 DB를 대상으로 하거나 조인에 포함할 경우 복제 누락 또는 실행 오류가 발생할 수 있습니다.
  • Cross-DB DML 연산은 가급적 지양해 주십시오.

3.2. DDL (테이블 생성/수정/삭제)

SQL 예시 복제 여부
USE mig-db; CREATE/ALTER/DROP TABLE non-mig-db.table 복제되지 않음
USE non-mig-db; CREATE/ALTER/DROP TABLE mig-db.table 복제됨

3.3. View

SQL 예시 복제 여부 (mysqldump) 복제 여부 (mydumper) 실행 시
USE mig-db; CREATE VIEW ... JOIN non-mig-db.table 복제됨 마이그레이션되지 않음 제외 DB가 없으면 오류 발생
USE non-mig-db; CREATE VIEW ... 복제되지 않음 마이그레이션되지 않음 -
주의
  • View 정의에 제외 DB를 참조하면 실행 오류가 발생할 수 있습니다.
  • View는 단일 DB 기준으로 작성하는 것을 권장합니다.
  • 백업 방식에 따라 View의 마이그레이션 포함 여부가 달라집니다
    • 백업 방식 mysqldump 사용 시: View 마이그레이션 대상에 포함
    • 백업 방식 mydumper 사용 시: View 마이그레이션 대상에 포함되지 않음

3.4. Stored Procedure / Function / Trigger

SQL 예시 복제 여부 실행 시
mig-db.CrossDbDataSync() 내부에서 INSERT INTO non-mig-db.table 복제됨 실행 시 오류 발생 가능
non-mig-db.LogUserActivity() 복제되지 않음 -
USE mig-db; CREATE TRIGGER ... INSERT INTO non-mig-db.table 복제됨 실행 시 오류 발생 가능
참고
  • 복제 여부는 실행 환경 DB(USE)가 아닌, 실제 연산 대상 DB 기준으로 결정됩니다.
  • Cross-DB 연산은 가급적 지양해 주십시오.
    • 제외 DB를 대상으로 하거나 조인에 포함할 경우, 실행 오류가 발생할 수 있습니다.
    • Cross-DB SQL이 포함된 경우, 관련된 모든 DB를 마이그레이션 대상에 포함해 주십시오.
  • Procedure, Function, Trigger, View 정의 시 단일 DB 기준으로 작성하고, 제외 DB를 참조하지 않도록 해주십시오.
  • 마이그레이션 전 애플리케이션 로직을 사전 테스트하여 실행 오류를 예방해 주십시오.
주의
  • 정의 자체는 복제되지만, 실행 시 제외 DB 접근으로 오류가 발생할 수 있습니다.
  • 모든 객체는 단일 DB 기준으로 작성하는 것을 권장합니다.
참고

이 가이드에서 필요한 정보를 찾지 못했거나 추가로 필요한 정보가 있으신 경우, 언제든지 아래의 피드백 아이콘을 클릭하여 의견을 보내 주십시오. 전달해 주신 의견을 참고하여 더 유용한 정보를 제공하겠습니다.