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으로 마이그레이션을 실행하는 경우 no_auto_create_user SQL 모드가 MySQL 원본 서버 5.7에서 설정되어 있으면 오류가 발생합니다.
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 열과 호환되지 않을 수 있으므로 테이블의 스키마 마이그레이션이 실패할 수 있습니다.
해결 방법: 이 문제를 해결하려면 마이그레이션 프로세스가 완료된 후 외래 키를 삭제하고 다시 만드는 것이 좋습니다.