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 열과 호환되지 않을 수 있으므로 테이블의 스키마 마이그레이션이 실패할 수 있습니다.
해결 방법: 이 문제를 해결하려면 마이그레이션 프로세스가 완료된 후 외래 키를 삭제하고 다시 만드는 것이 좋습니다.