다음을 통해 공유


MySQL에서 Azure Database for MySQL로의 데이터 마이그레이션 - MySQL 일관성 스냅샷

MySQL 일관성 스냅샷은 진행 중인 CRUD(만들기, 읽기, 업데이트, 삭제) 작업으로 인한 원본 데이터 무결성의 손실 없이도 사용자가 MySQL 서버의 일관성 스냅샷을 수행할 수 있는 새로운 기능입니다. 이 기능을 통해 원본 서버를 읽기 전용 모드로 설정할 필요 없이 트랜잭션 일관성이 달성됩니다. 또한 사용자에게 제공되는 여러 데이터 일관성 옵션이 있습니다. 읽기 잠금이 있는 일관된 스냅샷 사용(일반 공급), 잠금이 없는 일관된 스냅샷 사용(미리 보기), 원본 서버를 읽기 전용으로 설정 또는 None으로 설정 등이 있습니다. 'None' 옵션을 선택하면 데이터 일관성을 보장하기 위한 추가 조치가 필요 없습니다. 트랜잭션 일관성을 유지하려면 '잠금이 없는 일관된 스냅샷 사용' 옵션을 선택하는 것이 좋습니다.

MySQL에서 Azure Database for MySQL로의 데이터 마이그레이션 마법사 - 트랜잭션 일관성 사용.

잠금이 없는 일관된 스냅샷 사용(미리 보기)

이 옵션을 사용하면 초기 로드 후에 조정 단계가 발생합니다. 이는 대상에 기록된 데이터가 이진 로그의 특정 위치에서 원본 서버와 트랜잭션 측면에서 일치하도록 하기 위한 것입니다.

이 기능을 사용하면 서버에서 읽기 잠금을 사용하지 않습니다. 대신 각 테이블의 서로 다른 binlog 위치를 추적하면서 서로 다른 특정 시점의 테이블을 읽습니다. 이렇게 하면 캐치업 모드에서 복제를 수행하여 초기 로드가 끝날 때까지 테이블을 조정하여 일관된 스냅샷을 가져오는 데 도움이 됩니다.

MySQL에서 Azure Database for MySQL로의 데이터 마이그레이션 마법사 - 마이그레이션 진행.

MySQL에서 Azure Database for MySQL로의 데이터 마이그레이션 마법사 - 조정 진행.

잠금이 없는 일관된 스냅샷의 주요 기능:

  • 읽기 잠금 없이 워크로드가 많은 서버 또는 장기 실행 트랜잭션이 있는 서버를 지원하는 기능.
  • 일시적인 네트워크/서버 블립으로 인해 오류가 발생하여 미리 생성된 모든 연결이 손실되는 경우에도 마이그레이션을 완료하는 데 복원력이 있습니다.

읽기 잠금이 있는 일관된 스냅샷 사용(일반 공급)

이 옵션을 사용하면 서비스는 읽기 잠금이 있는 원본 서버의 모든 테이블을 플러시하여 특정 시점 스냅샷을 가져옵니다. 이 플러시는 전역 잠금이 개별 데이터베이스 또는 테이블을 잠그는 것보다 더 안정적이기 때문에 수행됩니다. 따라서 서버의 데이터베이스를 일부만 마이그레이션하더라도 마이그레이션 프로세스 설정의 일부로 데이터베이스가 잠깁니다. 마이그레이션 서비스는 반복 가능한 읽기를 시작하고 현재 테이블 상태를 스냅샷에 대한 실행 취소 로그의 내용과 결합합니다. 스냅샷은 서버 전체 잠금을 가져오고 마이그레이션을 위한 여러 연결을 생성한 후에 생성됩니다. 마이그레이션에 사용할 모든 연결을 만든 후 테이블의 잠금이 해제됩니다.

반복 가능한 읽기가 사용하도록 설정되어 마이그레이션 중에 실행 취소 로그에 액세스할 수 있도록 유지되므로 장기 실행 연결로 인해 원본에 필요한 스토리지가 증가합니다. 여러 테이블에 변경이 발생하는 장기 마이그레이션은 재생해야 하는 광범위한 실행 취소 로그 기록으로 이어지고, 원본 서버에서 컴퓨팅 요구 사항과 로드를 증가시킬 수도 있습니다.

원본 서버를 읽기 전용으로 설정

이 옵션을 선택하면 마이그레이션하는 동안 원본 서버에서 쓰기/삭제 작업을 방지하여 원본이 마이그레이션되기 때문에 대상 데이터베이스의 데이터 무결성이 유지됩니다. 마이그레이션 프로세스의 일부에서 원본 서버를 읽기 전용으로 설정하면 마이그레이션을 위한 선택의 여부와 관계없이 선택 항목이 모든 원본 서버의 데이터베이스에 적용됩니다.

원본 서버를 읽기 전용으로 만들면 사용자가 데이터를 수정할 수 없으므로 데이터베이스를 업데이트 작업에 사용할 수 없게 됩니다. 그러나 이 옵션을 사용하지 않으면 마이그레이션 중에 데이터 업데이트가 발생할 수 있습니다. 그 결과, 데이터베이스 스냅샷이 시간 상 서로 다른 지점에서 읽히기 때문에 마이그레이션된 데이터가 일치하지 않을 수 있습니다.

읽기 잠금이 있는 일관성 있는 스냅샷을 사용하기 위한 사전 요구 사항

읽기 잠금이 있는 일관된 스냅샷을 사용하도록 설정하여 마이그레이션을 성공적으로 완료하려면 다음을 수행합니다.

  • 읽기 잠금을 사용하여 테이블 플러시를 시도하는 사용자에게 RELOAD 또는 FLUSH 권한이 있는지 확인합니다.

  • mysql 클라이언트 도구를 사용하여 원본 서버에서 log_bin이 사용하도록 설정되어 있는지 확인합니다. Bin 로그가 기본적으로 항상 켜져 있는 것은 아니며 마이그레이션을 시작하기 전에 활성화되어 있는지 확인해야 합니다. mysql 클라이언트 도구는 SHOW VARIABLES LIKE 'log_bin';과 같은 명령을 실행하여 log_bin이 원본에서 사용하도록 설정되어 있는지 확인하는 데 사용됩니다.

참고 항목

최대 4TB를 지원하는 Azure Database for MySQL 단일 서버를 사용하는 경우 이는 기본적으로 사용하도록 설정되지 않습니다. 그러나 원본 서버에 대한 읽기 복제본을 승격한 다음, 읽기 복제본을 삭제하면 매개변수가 ON으로 설정됩니다.

  • 원본 서버에서 binlog_expire_logs_seconds 매개 변수를 구성하여 복제본이 변경 내용을 커밋하기 전에 binlog 파일이 제거되지 않도록 합니다. 컷오버에 성공하면 값을 초기화할 수 있습니다.

잠금이 없는 일관된 스냅샷 사용의 알려진 문제 및 제한 사항

  • Cascade 또는 Set Null on delete/on update 절을 갖는 외래 키가 있는 테이블은 지원되지 않습니다.
  • 초기 로드 중에는 DDL 변경이 발생하지 않습니다.

읽기 잠금이 있는 일관된 스냅샷 사용의 알려진 문제 및 제한 사항

일관성 백업과 관련된 알려진 문제 및 제한 사항은 잠금 및 재시도라는 두 가지 범주로 광범위하게 분류됩니다.

참고 항목

마이그레이션 서비스는 모든 작업자 스레드에 대해 START TRANSACTION WITH CONSISTENT SNAPSHOT 쿼리를 실행하여 서버 스냅샷을 가져옵니다. 그러나 이는 InnoDB에서만 지원됩니다. 여기에서 자세한 내용을 참고하세요.

잠금

일반적으로 잠금을 가져오는 작업은 간단한 프로세스이며 완료하는 데 몇 초에서 몇 분 정도 걸립니다. 그러나 소수의 시나리오에서는 원본 서버에 대한 잠금을 가져오려는 시도가 실패할 수 있습니다.

  • 장기 실행 쿼리가 있으면 DMS가 테이블의 하위 집합을 잠근 다음 마지막 몇 개만 사용할 수 있을 때까지 기다리는 중에 시간 초과가 발생하여 불필요한 가동 중지 시간이 발생할 수 있습니다. 마이그레이션을 시작하기 전에 SHOW PROCESSLIST 명령을 실행하여 장기 실행 작업이 있는지 확인합니다.

  • 잠금이 요청될 때 원본 서버에 많은 쓰기 업데이트가 발생하는 경우에는 잠금을 쉽게 가져올 수 없으며 잠금 대기 시간 초과 후 실패할 수 있습니다. 이는 테이블에 일괄 처리 작업이 있는 경우 발생하며, 진행 중인 경우 잠금 요청을 거부할 수 있습니다. 앞에서 설명한 것처럼 요청된 잠금은 전체 서버에 대한 단일 전역 수준 잠금이므로 단일 테이블 또는 데이터베이스가 처리 중인 경우에도 잠금 요청은 진행 중인 작업이 완료될 때까지 기다려야 합니다.

  • 또 다른 제한 사항은 AWS RDS 원본 서버에서 마이그레이션하는 것과 관련이 있습니다. RDS는 읽기 잠금이 있는 플러시 테이블을 지원하지 않으며 LOCK TABLE 쿼리는 내부에서 선택된 테이블에서 실행됩니다. 테이블이 개별적으로 잠겨 있으므로 잠금 프로세스의 안정성이 떨어질 수 있으며 잠금을 획득하는 데 시간이 더 오래 걸릴 수 있습니다.

재시도

마이그레이션에서 일시적인 연결 문제를 처리하고 추가 연결은 일반적으로 이 목적을 위해 미리 프로비전됩니다. 마이그레이션 설정, 특히 원본에 대한 병렬 읽기 작업의 수를 살펴보고 계수(일반적으로 ~1.5)를 적용하고 미리 많은 연결을 만듭니다. 이렇게 하면 서비스에서 작업을 병렬로 계속 실행할 수 있게 해줍니다. 연결이 끊어지거나 서비스가 잠금을 가져올 수 없는 경우 서비스는 프로비전된 잉여 연결을 사용하여 마이그레이션을 다시 시도합니다. 프로비전된 모든 연결이 소진되어 특정 시점 동기화가 손실되면 마이그레이션을 처음부터 다시 시작해야 합니다. 성공해도 실패해도 정리 작업은 이 오프라인 마이그레이션 서비스에서 수행되므로 사용자는 명시적 정리 작업을 수행할 필요가 없습니다.

다음 단계