입력 데이터 복제를 사용하여 Amazon RDS for MySQL를 Azure Database for MySQL로 마이그레이션

적용 대상: Azure Database for MySQL - 단일 서버 Azure Database for MySQL - 유연한 서버

Important

Azure Database for MySQL 단일 서버는 사용 중지 경로에 있습니다. Azure Database for MySQL 유연한 서버로 업그레이드하는 것이 좋습니다. Azure Database for MySQL - 유연한 서버로 마이그레이션하는 방법에 대한 자세한 내용은 Azure Database for MySQL 단일 서버에 대한 새로운 소식을 참조하세요.

참고 항목

이 문서에는 Microsoft에서 더 이상 사용하지 않는 용어인 슬레이브라는 용어에 대한 참조가 포함되어 있습니다. 소프트웨어에서 용어가 제거되면 이 문서에서 해당 용어가 제거됩니다.

MySQL 덤프 및 복원, MySQL Workbench 내보내기 및 가져오기 또는 Azure Database Migration Service와 같은 방법을 사용하여 MySQL 데이터베이스를 Azure Database for MySQL 유연한 서버로 마이그레이션할 수 있습니다. mysqldump 또는 mydumper와 같은 오픈 소스 도구와 입력 데이터 복제 기능이 있는 myloader를 함께 사용하면 가동 중지 시간을 최소화하면서 워크로드를 마이그레이션할 수 있습니다.

입력 데이터 복제는 이진 로그 파일 위치 메서드에 따라 데이터 변경 내용을 원본 서버에서 대상 서버로 복제하는 기술입니다. 이 시나리오에서 원본(데이터베이스 변경이 시작된 곳)으로 작동하는 MySQL 인스턴스는 업데이트 및 변경 내용을 이벤트로 이진 로그에 기록합니다. 이진 로그의 정보는 기록되는 데이터베이스 변경 내용에 따라 다른 로깅 형식으로 저장됩니다. 복제본은 원본에서 이진 로그를 읽고 복제본의 로컬 데이터베이스에서 이진 로그의 이벤트를 실행하도록 구성됩니다.

원본 MySQL 서버의 데이터를 대상 MySQL 서버로 동기화하려면 입력 데이터 복제를 설정합니다. 기본(또는 원본 데이터베이스)에서 복제본(또는 대상 데이터베이스)으로 애플리케이션을 선택적으로 컷오버할 수 있습니다.

이 자습서에서는 Amazon RDS(Relational Database Service) for MySQL을 실행하는 원본 서버와 Azure Database for MySQL 유연한 서버를 실행하는 대상 서버 간에 입력 데이터 복제를 설정하는 방법을 알아봅니다.

성능 고려 사항

이 자습서를 시작하기 전에, 작업을 수행하는 데 사용할 클라이언트 컴퓨터의 위치 및 용량이 성능에 미치는 영향을 고려해야 합니다.

클라이언트 위치

데이터베이스 서버와 동일한 위치에서 시작된 클라이언트 컴퓨터에서 덤프 또는 복원 작업을 수행하세요.

  • Azure Database for MySQL 유연한 서버 인스턴스의 경우 클라이언트 컴퓨터는 대상 데이터베이스 서버와 동일한 가상 네트워크 및 가용성 영역에 있어야 합니다.
  • 원본 Amazon RDS 데이터베이스 인스턴스의 경우 클라이언트 인스턴스는 원본 데이터베이스 서버와 동일한 Amazon Virtual Private Cloud 및 가용성 영역에 있어야 합니다. 위의 예제에서 FTP 또는 SFTP와 같은 파일 전송 프로토콜을 사용하여 클라이언트 머신 간에 덤프 파일을 이동하거나 Azure Blob Storage에 업로드할 수 있습니다. 총 마이그레이션 시간을 줄이려면 파일을 전송하기 전에 압축합니다.

클라이언트 용량

클라이언트 컴퓨터가 어디에 있든, 요청된 작업을 수행하기에 적절한 컴퓨팅, I/O 및 네트워크 용량이 필요합니다. 다음은 일반적인 권장 사항입니다.

  • 덤프 또는 복원에 데이터의 실시간 처리(예: 압축 또는 압축 해제)가 포함된 경우 덤프 또는 복원 스레드당 CPU 코어가 하나 이상 있는 인스턴스 클래스를 선택합니다.
  • 클라이언트 인스턴스에 사용할 수 있는 네트워크 대역폭이 충분한지 확인합니다. 가속화된 네트워킹 기능을 지원하는 인스턴스 유형을 사용합니다. 자세한 내용은 Azure Virtual Machine 네트워킹 가이드의 "가속화된 네트워킹" 섹션을 참조하세요.
  • 클라이언트 머신의 스토리지 계층이 필요한 읽기/쓰기 용량을 제공하는지 확인합니다. 프리미엄 SSD 스토리지를 사용하는 Azure 가상 머신을 사용하는 것이 좋습니다.

필수 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • 클라이언트 컴퓨터에 mysqlclient를 설치하여 덤프를 만들고 대상 Azure Database for MySQL 유연한 서버 인스턴스에서 복원 작업을 수행합니다.

  • 더 큰 데이터베이스의 경우 데이터베이스의 병렬 덤프 및 복원을 위해 mydumper 및 myloader를 설치합니다.

    참고 항목

    Mydumper는 Linux 배포판에서만 실행할 수 있습니다. 자세한 내용은 mydumper 설치 방법을 참조하세요.

  • 버전 5.7 또는 8.0을 실행하는 Azure Database for MySQL 유연한 서버의 인스턴스를 만듭니다.

    Important

    대상이 영역 중복 HA(고가용성)가 있는 Azure Database for MySQL 유연한 서버인 경우 이 구성에는 입력 데이터 복제가 지원되지 않습니다. 해결 방법으로 서버를 만드는 동안 다음과 같이 영역 중복 HA를 설정하세요.

    1. 영역 중복 HA를 사용하는 서버를 만듭니다.
    2. HA를 사용하지 않도록 설정합니다.
    3. 문서에 따라 입력 데이터 복제를 설정합니다.
    4. 컷오버 후, 입력 데이터 복제 구성을 제거합니다.
    5. HA를 사용하도록 설정합니다.

다음 설명처럼 여러 매개 변수 및 기능을 적절하게 구성하고 설정합니다.

  • 호환성을 위해 원본 데이터베이스와 대상 데이터베이스 서버가 동일한 MySQL 버전에 있어야 합니다.
  • 각 테이블에 기본 키가 있어야 합니다. 테이블에 기본 키가 없으면 복제 프로세스가 느려질 수 있습니다.
  • 원본 및 대상 데이터베이스의 문자 집합이 동일한지 확인합니다.
  • wait_timeout 매개 변수를 적절한 시간으로 설정합니다. 이 시간은 가져오거나 마이그레이션하려는 데이터 또는 워크로드의 양에 따라 달라집니다.
  • 모든 테이블에서 InnoDB를 사용하는지 확인합니다. Azure Database for MySQL 유연한 서버는 InnoDB 스토리지 엔진만 지원합니다.
  • 보조 인덱스가 많은 테이블이나 대규모 테이블의 경우 복원 중에 성능 오버헤드 효과가 표시됩니다. CREATE TABLE 문에 보조 키 정의가 포함되지 않도록 덤프 파일을 수정합니다. 데이터를 가져온 후, 복원 프로세스 중에 성능이 저하되지 않도록 보조 인덱스를 다시 만듭니다.

마지막으로, 다음과 같이 입력 데이터 복제를 준비합니다.

  • 대상 Azure Database for MySQL 유연한 서버 인스턴스가 포트 3306을 통해 원본 Amazon RDS for MySQL 서버에 연결할 수 있는지 확인합니다.
  • 원본 Amazon RDS for MySQL 서버가 포트 3306에서 인바운드 및 아웃바운드 트래픽을 모두 허용하는지 확인합니다.
  • Azure ExpressRoute 또는 Azure VPN Gateway를 사용하여 원본 서버에 사이트 간 연결을 제공합니다. 가상 네트워크 만들기에 대한 자세한 내용은 Azure Virtual Network 설명서를 참조하세요. 단계별 세부 정보가 포함된 빠른 시작 문서도 참조하세요.
  • 대상 Azure Database for MySQL 유연한 서버 IP 주소를 허용하도록 원본 데이터베이스 서버의 네트워크 보안 그룹을 구성합니다.

Important

원본 Amazon RDS for MySQL 인스턴스에서 GTID_mode가 ON으로 설정된 경우 Azure Database for MySQL 유연한 서버의 대상 인스턴스에서도 GTID_mode를 ON으로 설정해야 합니다.

Azure Database for MySQL의 대상 인스턴스를 구성합니다.

입력 데이터 복제의 대상인 Azure Database for MySQL 유연한 서버의 대상 인스턴스를 구성하려면 다음을 수행합니다.

  1. max_allowed_packet 매개 변수 값을 최댓값인 1073741824(1GB)로 설정합니다. 이 값은 긴 행과 관련된 오버플로 문제를 방지합니다.

  2. 마이그레이션하는 동안 slow_query_log, general_log, audit_log_enabledquery_store_capture_mode 매개 변수를 OFF로 설정하여 쿼리 로깅과 관련된 오버헤드를 제거합니다.

  3. 대상 Azure Database for MySQL 유연한 서버 인스턴스의 컴퓨팅 크기를 최대 64개 vCore로 스케일 업합니다. 이 크기는 원본 서버의 데이터베이스 덤프를 복원할 때 더 많은 컴퓨팅 리소스를 제공합니다.

    마이그레이션이 완료된 후 언제든지 애플리케이션 요구 사항에 맞게 컴퓨팅 크기를 스케일 다운할 수 있습니다.

  4. 마이그레이션 중에 스토리지 크기를 스케일 업하여 IOPS를 늘리거나 마이그레이션의 최대 IOPS를 늘립니다.

    참고 항목

    사용 가능한 최대 IOPS는 컴퓨팅 크기에 따라 결정됩니다. 자세한 내용은 Azure Database for MySQL 유연한 서버의 컴퓨팅 및 스토리지 옵션에서 IOPS 섹션을 참조하세요.

원본 Amazon RDS for MySQL 서버 구성

입력 데이터 복제의 원본인 Amazon RDS에 호스트되는 MySQL 서버를 준비하고 구성하려면 다음을 수행합니다.

  1. 원본 Amazon RDS for MySQL 서버에서 이진 로깅을 사용하도록 설정되었는지 확인합니다. 자동화된 백업을 사용하도록 설정되었는지 확인하거나, 원본 Amazon RDS for MySQL 서버에 대한 읽기 복제본이 있는지 확인합니다.

  2. 변경 내용이 Azure Database for MySQL 유연한 서버의 대상 인스턴스에 적용될 때까지 원본 서버의 이진 로그 파일이 유지되는지 확인합니다.

    입력 데이터 복제를 사용하면 Azure Database for MySQL 유연한 서버가 복제 프로세스를 관리하지 않습니다.

  3. 원본 Amazon RDS 서버의 이진 로그 보존을 확인하여 이진 로그가 보존되는 시간을 확인하려면 mysql.rds_show_configuration 저장 프로시저를 호출합니다.

    mysql> call mysql.rds_show_configuration;
    +------------------------+-------+-----------------------------------------------------------------------------------------------------------+
    | name | value | description |
    +------------------------+-------+-----------------------------------------------------------------------------------------------------------+
    | binlog retention hours | 24 | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
    | source delay | 0 | source delay specifies replication delay in seconds between current instance and its master. |
    | target delay | 0 | target delay specifies replication delay in seconds between current instance and its future read-replica. |
    +------------------------+-------            +-----------------------------------------------------------------------------------------------------------+
    3 rows in set (0.00 sec)
    
  4. 이진 로그 보존 기간을 구성하려면 rds_set_configuration 저장 프로시저를 실행하여 이진 로그가 원하는 시간 동안 원본 서버에 유지되도록 합니다. 예시:

    Mysql> Call mysql.rds_set_configuration(‘binlog retention hours', 96);
    

    덤프를 만들고 복원하는 경우 앞의 명령을 사용하면 델타 변경 내용을 빠르게 파악할 수 있습니다.

    참고 항목

    정의된 보존 기간을 기준으로 원본 서버에 이진 파일 로그를 저장할 충분한 디스크 공간을 확보합니다.

원본 Amazon RDS for MySQL 서버에서 데이터 덤프를 캡처하는 두 가지 방법이 있습니다. 한 가지 방법은 원본 서버에서 직접 데이터 덤프를 캡처하는 것입니다. 다른 방법은 Amazon RDS for MySQL 읽기 복제본에서 덤프를 캡처하는 것입니다.

  • 원본 서버에서 직접 데이터 덤프를 캡처하려면 다음을 수행합니다.

    1. 트랜잭션적으로 일관된 데이터 덤프를 얻으려면 몇 분 동안 애플리케이션에서 쓰기를 중지해야 합니다.

      데이터 덤프를 캡처할 때 쓰기가 처리되지 않도록 read_only 매개 변수를 일시적으로 1로 설정할 수도 있습니다.

    2. 원본 서버에서 쓰기를 중지한 후, Mysql> Show master status; 명령을 실행하여 이진 로그 파일 이름 및 오프셋을 수집합니다.

    3. Azure Database for MySQL 유연한 서버 인스턴스에서 복제를 시작하려면 이러한 값을 저장합니다.

    4. 데이터 덤프를 만들려면 다음 명령을 실행하여 mysqldump를 실행합니다.

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      
  • 원본 서버에서 쓰기를 중지할 수 없거나 원본 서버에서 데이터를 덤프하는 성능이 허용되지 않는 수준인 경우 다음과 같이 복제본 서버에서 덤프를 캡처합니다.

    1. 원본 서버와 동일한 구성으로 Amazon MySQL 읽기 복제본을 만듭니다. 이 복제본에 덤프를 만듭니다.

    2. Amazon RDS for MySQL 읽기 복제본이 원본 Amazon RDS for MySQL 서버를 따라잡도록 합니다.

    3. 읽기 복제본에서 복제본 지연 시간이 0에 도달하면 mysql.rds_stop_replication 저장 프로시저를 호출하여 복제를 중지합니다.

      Mysql> call mysql.rds_stop_replication;
      
    4. 복제가 중지되면 복제본에 연결합니다. 그런 다음, SHOW SLAVE STATUS 명령을 실행하여 Relay_Master_Log_File 필드의 현재 이진 로그 파일 이름과 Exec_Master_Log_Pos 필드의 로그 파일 위치를 검색합니다.

    5. Azure Database for MySQL 유연한 서버 인스턴스에서 복제를 시작하려면 이러한 값을 저장합니다.

    6. Amazon RDS for MySQL 읽기 복제본에서 데이터 덤프를 만들려면 다음 명령을 실행하여 mysqldump를 실행합니다.

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      

    참고 항목

    mydumper를 사용하여 원본 Amazon RDS for MySQL 데이터베이스에서 데이터의 병렬화된 덤프를 캡처할 수도 있습니다. 자세한 내용은 mydumper/myloader를 사용하여 대규모 데이터베이스를 Azure Database for MySQL 유연한 서버로 마이그레이션을 참조하세요.

  1. mysql 네이티브 복원을 사용하여 데이터베이스를 복원하려면 다음 명령을 실행합니다.

    $ mysql -h <target_server> -u <targetuser> -p < dumpname.sql
    
  2. 원본 Amazon RDS for MySQL 서버에 로그인하여 복제 사용자를 설정합니다. 그런 다음, 이 사용자에게 필요한 권한을 부여합니다.

    • SSL을 사용하는 경우 다음 명령을 실행합니다.

      Mysql> CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      Mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%' REQUIRE SSL;
      Mysql> SHOW GRANTS FOR syncuser@'%';
      
    • SSL을 사용하지 않는 경우 다음 명령을 실행합니다.

      Mysql> CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      Mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%';
      Mysql> SHOW GRANTS FOR syncuser@'%';
      

    저장 프로시저는 모든 입력 데이터 복제 함수를 수행합니다. 모든 프로시저에 대한 자세한 내용은 입력 데이터 복제 저장 프로시저를 참조하세요. 이러한 저장 프로시저는 MySQL 셸 또는 MySQL Workbench에서 실행할 수 있습니다.

  3. Amazon RDS for MySQL 원본 서버와 Azure Database for MySQL 유연한 서버 대상 서버를 연결하려면 대상 Azure Database for MySQL 유연한 서버 인스턴스에 로그인합니다. 다음 명령을 실행하여 Amazon RDS for MySQL 서버를 원본 서버로 설정합니다.

    CALL mysql.az_replication_change_master('source_server','replication_user_name','replication_user_password',3306,'<master_bin_log_file>',master_bin_log_position,'<master_ssl_ca>');
    
  4. 원본 Amazon RDS for MySQL 서버와 대상 Azure Database for MySQL 유연한 서버 인스턴스 간의 복제를 시작하려면 다음 명령을 실행합니다.

    Mysql> CALL mysql.az_replication_start;
    
  5. 복제 상태를 확인하려면 복제본 서버에서 다음 명령을 실행합니다.

    Mysql> show slave status\G
    

    Slave_IO_Running 매개 변수와 Slave_SQL_Running 매개 변수의 상태가 이면 복제가 시작되어 실행 중인 상태입니다.

  6. Seconds_Behind_Master 매개 변수 값을 확인하여 대상 서버가 얼마나 지연되었는지 확인합니다.

    값이 0이면 대상이 원본 서버의 모든 업데이트를 처리한 것입니다. 값이 0 이외의 다른 값이면 대상 서버가 아직 업데이트를 처리하는 중입니다.

성공적으로 중단되는지 확인

성공적으로 컷오버되는지 확인하려면 다음을 수행합니다.

  1. 대상 Azure Database for MySQL 유연한 서버 인스턴스에서 적절한 로그인 및 데이터베이스 수준 권한을 구성합니다.
  2. 원본 Amazon RDS for MySQL 서버에 쓰기를 중지합니다.
  3. 대상 Azure Database for MySQL 유연한 서버 인스턴스가 원본 서버를 따라잡았으며 Seconds_Behind_Master 값이 show slave status0인지 확인합니다.
  4. 모든 변경 내용이 대상 Azure Database for MySQL 유연한 서버 인스턴스에 복제되었으므로 복제를 중지하려면 저장 프로시저 mysql.az_replication_stop을 호출합니다.
  5. mysql.az_replication_remove_master를 호출하여 입력 데이터 복제 구성을 제거합니다.
  6. 클라이언트 및 클라이언트 애플리케이션을 대상 Azure Database for MySQL 유연한 서버 인스턴스로 리디렉션합니다.

이제 마이그레이션이 완료되었습니다. 애플리케이션은 Azure Database for MySQL 유연한 서버를 실행하는 서버에 연결됩니다.

다음 단계