다음을 통해 공유


MySQL에서 Azure Database for MySQL로 데이터 마이그레이션 - MySQL 스키마 마이그레이션

MySQL 스키마 마이그레이션은 사용자가 데이터베이스, 테이블, 뷰, 트리거, 이벤트, 저장 프로시저 및 함수와 같은 개체에 대한 스키마를 마이그레이션할 수 있는 새로운 함수입니다. 이 기능은 마이그레이션을 시작하기 전에 대상 데이터베이스를 준비하는 데 필요한 일부 작업을 자동화하는 데 유용합니다.

현재 구현

현재 구현에서, 사용자는 DMS 마이그레이션 프로젝트 구성 시 서버 개체 선택 섹션 아래의 데이터베이스 선택 탭에서 마이그레이션하려는 서버 개체(보기, 트리거, 이벤트, 루틴)를 선택할 수 있습니다. 또한 데이터베이스 선택 섹션에서 스키마를 마이그레이션할 데이터베이스를 선택할 수 있습니다.

데이터베이스 선택 스크린샷.

테이블 개체의 스키마를 마이그레이션하려면 테이블 선택 탭으로 이동합니다. 탭이 채워지기 전에 DMS는 원본 및 대상의 선택한 데이터베이스에서 테이블을 가져온 다음, 테이블이 있고 데이터가 포함되어 있는지 여부를 확인합니다. 대상 데이터베이스에 없는 원본 데이터베이스의 테이블을 선택하는 경우 스키마 마이그레이션 아래 상자가 기본적으로 선택됩니다. 대상 데이터베이스에 있는 테이블의 경우 선택한 테이블이 이미 포함하고 잘릴 것임을 나타냅니다. 또한 대상 서버의 테이블 스키마가 원본의 스키마와 일치하지 않으면 마이그레이션이 계속되기 전에 테이블이 삭제됩니다.

테이블 선택 스크린샷.

다음 탭으로 계속 진행하면 DMS는 입력 내용의 유효성을 검사하고 선택한 테이블이 스키마 마이그레이션 입력 없이 선택된 경우 일치하는지 유효성을 검사합니다. 유효성 검사가 통과되면 마이그레이션 시나리오를 시작할 수 있습니다.

마이그레이션을 시작한 후 마이그레이션이 진행됨에 따라 원본에서 대상으로 데이터를 마이그레이션하기 전에 각 테이블이 만들어집니다. 데이터 마이그레이션이 완료된 후 마이그레이션되는 트리거 및 뷰를 제외하고 테이블에는 데이터 마이그레이션 이전에 다른 개체가 만들어집니다.

스키마 마이그레이션 작동 방식

스키마 마이그레이션은 원본에서 개체에 대한 스키마 정보를 수집하기 위한 MySQL의 "SHOW CREATE" 구문으로 지원됩니다. 개체에 대한 스키마를 원본에서 대상으로 마이그레이션할 때 DMS는 입력을 처리하고 개체를 개별적으로 마이그레이션합니다. 또한 DMS는 "SHOW CREATE" 쿼리에서 제공되는 데이터 정렬, 문자 집합 및 기타 관련 정보를 만들기 쿼리로 래핑한 다음 대상에서 처리합니다.

데이터가 마이그레이션되기 전에 루틴이벤트가 마이그레이션됩니다. 각 개별 테이블에 대한 스키마는 테이블에 대한 데이터 이동이 시작되기 직전에 마이그레이션됩니다. 트리거는 데이터 마이그레이션 부분 이후에 마이그레이션됩니다. 의 경우 MySQL은 뷰 콘텐츠의 유효성을 검사하고 뷰가 다른 테이블에 의존할 수 있으므로 DMS는 데이터베이스 데이터 이동이 시작되기 전에 먼저 뷰에 대한 테이블을 만든 다음 임시 테이블을 삭제하고 뷰를 만듭니다.

원본과 대상을 쿼리할 때 일시적인 오류가 발생하면 DMS는 쿼리를 다시 시도합니다. 그러나 DMS가 복구할 수 없는 오류가 발생하는 경우(예: 버전 업그레이드 마이그레이션 수행 시 잘못된 구문) DMS는 실패하고 완료 시 해당 오류 메시지를 보고합니다. 테이블 만들 때 오류가 발생하면 해당 테이블의 데이터는 마이그레이션되지 않지만, 선택한 다른 테이블의 데이터 및 스키마 마이그레이션이 시도됩니다. 이벤트, 루틴에 대해 또는 뷰에 대한 임시 테이블을 만들 때 복구할 수 없는 오류가 발생하는 경우, 데이터 마이그레이션 부분 이후에 마이그레이션되는 개체 및 선택한 테이블에 대한 마이그레이션을 실행하기 전에 마이그레이션이 실패합니다.

뷰에 대해 임시 테이블이 만들어지므로 뷰 마이그레이션에 실패하면 임시 테이블이 대상에 남아 있습니다. 근본적인 문제가 해결되고 마이그레이션이 다시 시도되면 DMS는 뷰를 만들기 전에 해당 테이블을 삭제합니다. 또는 향후 마이그레이션에서 뷰에 대해 스키마 마이그레이션을 사용하지 않기로 선택한 경우 뷰를 수동으로 마이그레이션하기 전에 임시 테이블을 수동으로 삭제해야 합니다.

필수 조건

스키마 마이그레이션을 성공적으로 완료하려면 다음 필수 조건이 충족되었는지 확인합니다.

  • 원본 데이터베이스에 대한 "READ" 권한.

  • 데이터베이스에서 개체를 선택하는 기능에 대한 "SELECT" 권한

  • 뷰를 마이그레이션하는 경우 사용자에게 "SHOW VIEW" 권한이 있어야 합니다.

  • 트리거를 마이그레이션하는 경우 사용자에게 "TRIGGER" 권한이 있어야 합니다.

  • 루틴(프로시저 및/또는 함수)을 마이그레이션하는 경우 루틴의 definer 절에 사용자의 이름을 지정해야 합니다. 또는 버전에 따라 사용자에게 다음 권한이 있어야 합니다.

    • 5.7의 경우 "mysql.proc" 테이블에 대한 "SELECT" 액세스 권한이 있습니다.

    • 8.0의 경우 "SHOW_ROUTINE" 권한이 있거나 루틴을 포함하는 범위에서 "CREATE ROUTINE", "ALTER ROUTINE" 또는 "EXECUTE" 권한이 부여됩니다.

  • 이벤트를 마이그레이션하는 경우 사용자에게 이벤트가 표시될 원본 데이터베이스에 대한 "EVENT" 권한이 있어야 합니다.

제한 사항

  • 테이블이 아닌 개체를 마이그레이션하는 경우 DMS는 데이터베이스 이름 바꾸기를 지원하지 않습니다.

  • bin_log가 사용하도록 설정된 대상 서버로 마이그레이션할 때 루틴 및 트리거 만들기를 허용하려면 log_bin_trust_function_creators를 사용하도록 설정해야 합니다.

  • 현재 개체에 대한 DEFINER 절 마이그레이션은 지원되지 않습니다. 원본에 정의자가 있는 모든 개체 형식은 삭제되고 마이그레이션 후에는 테이블의 기본 정의자가 마이그레이션을 실행하는 데 사용되는 로그인으로 설정됩니다.

  • 버전 호환성에 호환성이 손상되는 변경이 있는 경우 일부 버전 업그레이드는 지원되지 않습니다. 버전 업그레이드에 대한 자세한 내용은 MySQL 문서를 참조하세요.

  • 현재는 데이터 이동의 일부로만 스키마를 마이그레이션할 수 있습니다. 데이터 이동을 위해 아무것도 선택하지 않으면 스키마 마이그레이션이 발생하지 않습니다. 스키마 마이그레이션을 위해 선택한 테이블은 데이터 이동을 위해 선택됩니다.