다음을 통해 공유


Azure Database for MySQL로의 마이그레이션과 관련된 알려진 문제

Azure Database for MySQL로의 마이그레이션과 관련된 알려진 문제는 다음 섹션에 설명되어 있습니다.

v8.0 MySQL 유연한 서버 대상에 대한 스키마 마이그레이션 문제

  • 오류: InnoDB 테이블에 대해 보이지 않는 기본 키를 생성하는 기능이 사용하도록 설정된 경우 엔진 버전 8.0.30 이상이 있는 MySQL 유연한 서버로 마이그레이션하지 못할 수 있습니다(MySQL :: MySQL 8.0 참조 설명서:: 13.1.20.11 보이지 않는 생성된 기본 키 참조). 원본에서 대상으로 테이블 스키마를 마이그레이션할 때, 온라인 마이그레이션의 복제 단계에서 변경 내용을 적용할 때, 마이그레이션을 다시 시도할 때 또는 스키마가 수동으로 마이그레이션된 대상으로 마이그레이션할 때 실패가 발생할 수 있습니다.

    잠재적 오류 메시지:

    • "알 수 없는 오류."
    • "보이지 않는 기본 키를 생성하지 못했습니다. 자동 증분 열이 이미 존재합니다."
    • "데이터베이스 'database'의 대상 테이블 '테이블 이름'에 있는 'my_row_id' 열이 원본 테이블에 없습니다."

    제한 사항: sql_generate_invisible_primary_key가 사용하도록 설정된 MySQL 유연한 서버 인스턴스로의 마이그레이션은 DMS에서 지원되지 않습니다.

    해결 방법: 대상 MySQL 유연한 서버에 대한 서버 매개 변수 sql_generate_invisible_primary_key를 꺼짐으로 설정합니다. 서버 매개 변수는 대상 MySQL 유연한 서버의 [모두] 탭 아래에 있는 [서버 매개 변수] 창에서 찾을 수 있습니다. 또한 대상 데이터베이스를 삭제하고 DMS 마이그레이션을 다시 시작하여 일치하지 않는 스키마가 없도록 합니다.

호환되지 않는 SQL 모드

하나 이상의 호환되지 않는 SQL 모드는 다양한 오류를 일으킬 수 있습니다. 이 오류가 발생할 경우 확인해야 할 서버 모드와 함께 오류의 예가 나와 있습니다.

  • 오류: '{activity}' 활동 중에 마이그레이션을 위해 서버 '{server}'의 데이터베이스 '{database}'에서 테이블 '{table}'을(를) 준비하는 동안 오류가 발생했습니다. 따라서 이 테이블은 마이그레이션되지 않습니다.

    제한 사항: 이 오류는 다음 SQL 모드 중 하나가 한 서버에는 설정되어 있지만 다른 서버에는 설정되어 있지 않을 때 발생합니다.

    해결 방법:

    • NO_ZERO_DATE

      원본에서 테이블 또는 데이터의 날짜에 대한 기본값이 0000-00-00이고 대상 서버에 NO_ZERO_DATE SQL 모드가 설정되어 있는 경우 스키마 및/또는 데이터 마이그레이션이 실패합니다. 다음과 같은 두 가지 해결 방법이 있습니다. 첫 번째는 열의 기본값을 NULL 또는 유효한 날짜로 변경하는 것입니다. 두 번째 옵션은 전역 SQL 모드 변수에서 NO_ZERO_DATE SQL 모드를 제거하는 것입니다.

    • NO_AUTO_CREATE_USER (사용자 자동 생성 없음)

      루틴의 스키마 마이그레이션을 수행하는 MySQL 원본 서버 5.7에서 MySQL 대상 서버 8.0으로 마이그레이션을 실행할 때 MySQL 원본 서버 5.7에 no_auto_create_user SQL 모드가 설정되어 있으면 오류가 발생합니다.

Binlog 보존 문제

  • 오류: binlog를 읽는 동안 심각한 오류가 발생했습니다. 이 오류는 binlog 파일 이름 및/또는 초기 위치가 잘못 지정되었음을 나타낼 수 있습니다.

    제한 사항: 이 오류는 binlog 보존 기간이 너무 짧으면 발생합니다.

    해결 방법: 이 경우 구성할 수 있는 여러 변수가 있습니다. 변수 binlog_expire_logs_seconds는 보존 기간을 결정하며 binlog_expire_logs_auto_purge를 해제하여 binlog 삭제를 방지할 수 있습니다. MySQL 5.7에는 더 이상 사용되지 않는 시스템 변수 expire_logs_days가 있습니다.

테이블 잠금을 가져오는 시간 제한

  • 오류: 일관된 뷰 생성을 위해 '{server}' 서버에서 읽기 잠금을 가져오는 동안 예외가 발생했습니다.

    제한 사항: 이 오류는 트랜잭션 일관성이 사용하도록 설정된 경우 모든 테이블에 대한 잠금을 가져오는 동안 시간 제한 사항이 발생할 때 발생합니다.

    해결 방법: 선택한 테이블이 잠겨 있지 않거나 장기 실행 트랜잭션이 실행되고 있지 않은지 확인합니다.

Azure Storage에 4MB 이상의 데이터 쓰기

  • 오류: 요청 본문이 너무 커서 허용되는 최대 제한을 초과합니다.

    제한 사항: 이 오류는 테이블이 너무 많아(>10k) 마이그레이션할 수 없을 때 발생할 수 있습니다. Azure Storage 서비스에 대한 각 호출에는 4MB 제한이 있습니다.

    해결 방법: 지원 요청을 만들어 지원 서비스에 문의하시면 REST API에 직접 액세스하는 사용자 지정 스크립트를 제공해드릴 수 있습니다.

중복 키 입력 문제

  • 오류: 오류는 시간 제한, 네트워크 문제 또는 대상 크기 조정으로 인한 증상인 경우가 많습니다.

    잠재적 오류 메시지: 대상 서버에서 발생한 SQL 오류로 인해 일괄 처리를 테이블 '{table}'에 쓸 수 없습니다. 컨텍스트를 위해 일괄 처리에 다음 원본 쿼리에서 반환된 행의 하위 집합이 포함되어 있습니다.

    제한 사항: 이 오류는 대상에 대한 시간 제한 또는 끊어진 연결로 인해 발생하는 중복된 기본 키 때문일 수 있습니다. 또한 대상에 대한 여러 마이그레이션이 동시에 실행 중이거나, 마이그레이션이 실행되는 동안 사용자가 대상에서 테스트 워크로드를 실행하고 있는 것과 관련이 있을 수 있습니다. 또한 원본에서는 기본 키가 고유할 필요가 없더라도 대상에서는 기본 키가 고유해야 할 수도 있습니다.

    해결 방법: 이 문제를 해결하려면 중복 마이그레이션이 실행되지 않고 원본 기본 키가 고유해야 합니다. 오류가 계속되면 지원 요청을 만들어 지원 서비스에 문의하고, REST API에 직접 액세스하는 사용자 지정 스크립트를 제공할 수 있습니다.

복제된 작업에 행이 일치하지 않는 오류가 있음

  • 오류: 온라인 마이그레이션에서 예상된 변경 횟수를 복제하지 못합니다.

    잠재적 오류 메시지: 원본 서버의 이진 로그에서 읽은 대상 서버에 레코드를 적용하는 동안 오류가 발생했습니다. 변경 내용은 이진 로그 '{mysql-bin.log}'와 위치 '{position}'에서 시작되어 이진 로그 '{mysql-bin.log}'와 위치 '{position}'에서 끝났습니다. 이진 로그 '{mysql-bin.log}'의 위치 '{position}' 이전의 원본 서버에 있는 모든 레코드가 대상에 커밋되었습니다.

    제한 사항: 원본에서 테이블에 삽입 및 삭제 문이 있었고 삭제는 명백한 고유 인덱스에 의한 것이었습니다.

    해결 방법: 테이블을 수동으로 마이그레이션하는 것이 좋습니다.

테이블 데이터 잘림 오류

  • 오류: 열거형 열의 하나 이상의 행에 null 값이 있으며 대상 SQL 모드가 strict로 설정됩니다.

    잠재적 오류 메시지: 데이터 잘림 오류로 인해 일괄 처리를 테이블 '{table}'에 쓸 수 없습니다. MySQL 테이블 열의 데이터 형식에 대해 데이터가 너무 크지 않은지 확인합니다. 열 형식이 열거형인 경우 SQL 모드가 TRADITIONAL, STRICT_TRANS_TABLES 또는 STRICT_ALL_TABLES로 설정되지 않고 원본 및 대상에서 동일한지 확인합니다.

    제한 사항: 특정 설정이 적용된 상태에서 기록 데이터가 원본 서버에 기록되었지만, 설정이 변경되면 데이터를 이동할 수 없는 경우 오류가 발생합니다.

    해결 방법: 이 문제를 해결하려면 대상 SQL 모드를 non-strict로 변경하거나 모든 null 값을 유효한 값으로 변경하는 것이 좋습니다.

개체 만들기 실패

  • 오류: 보기 유효성 검사에 실패한 후 오류가 발생했습니다.

    제한 사항: 이 오류는 뷰를 마이그레이션하려고 할 때 발생하며 뷰가 참조해야 하는 테이블을 찾을 수 없습니다.

    해결 방법: 보기를 수동으로 마이그레이션하는 것이 좋습니다.

테이블을 찾을 수 없음

  • 오류: 참조 테이블을 찾을 수 없어서 오류가 발생했습니다.

    잠재적 오류 메시지: 쿼리 실행으로 인해 파이프라인이 전략 MySqlSchemaMigrationViewUsingTableStrategy를 사용하여 '{activity}' 작업에 대한 개체 '{object}'의 스키마를 만들 수 없습니다.

    제한 사항: 이 오류는 뷰가 삭제되거나 이름이 바뀐 테이블을 참조하거나, 뷰가 잘못되었거나 불완전한 정보로 만들어진 경우 발생할 수 있습니다. 이 오류는 테이블의 하위 집합이 마이그레이션되었지만 해당 하위 집합이 종속된 테이블은 마이그레이션되지 않은 경우 발생할 수 있습니다.

    해결 방법: 보기를 수동으로 마이그레이션하는 것이 좋습니다. 외래 키와 CREATE VIEW 문에서 참조되는 모든 테이블이 마이그레이션을 위해 선택되었는지 확인합니다.

모든 풀링된 연결이 끊어짐

  • 오류: 원본 서버의 모든 연결이 끊어졌습니다.

    제한 사항: 이 오류는 초기 로드 시작 시 획득한 모든 연결이 서버 다시 시작, 네트워크 문제, 원본 서버의 임시한 트래픽 또는 기타 임시 문제로 인해 손실될 때 발생합니다. 이 오류는 복구할 수 없습니다. 또한, 유지 관리 기간 동안 서버를 마이그레이션하려고 하면 이 오류가 발생합니다.

    해결 방법: 마이그레이션을 다시 시작해야 하며 원본 서버의 성능을 높이는 것이 좋습니다. 또 다른 문제는 장기 실행 연결을 종료시키고 이러한 스크립트가 작동하지 않도록 하는 스크립트입니다.

일관된 스냅샷이 손상됨

제한 사항: 고객이 마이그레이션 인스턴스를 처음 로드하는 동안 DDL을 수행할 때 오류가 발생합니다.

해결 방법: 이 문제를 해결하려면 초기 로드 중에 DDL을 변경하지 않는 것이 좋습니다.

외래 키 제약 조건

  • 오류: 테이블에서 참조된 외래 키 형식이 변경될 때 오류가 발생합니다.

    잠재적 오류 메시지: 외래 키 제약 조건 '{key}'에서 열 '{pk 열 1}' 및 참조된 열 '{fk 열 1}'을 참조하는 것은 호환되지 않습니다.

    제한 사항: 이 오류로 인해 테이블 ​​1의 PK 열이 테이블 2의 FK 열과 호환되지 않을 수 있으므로 테이블의 스키마 마이그레이션이 실패할 수 있습니다.

    해결 방법: 이 문제를 해결하려면 마이그레이션 프로세스가 완료된 후 외래 키를 삭제하고 다시 만드는 것이 좋습니다.