RDS for MySQL에 GTID 기반 복제 사용 - Amazon Relational Database Service

RDS for MySQL에 GTID 기반 복제 사용

아래에서는 Amazon RDS for MySQL DB 인스턴스 간 이진 로그(binlog) 복제를 통해 전역 트랜잭션 식별자(GTID)를 사용하는 방법을 배울 수 있습니다.

binlog 복제를 사용하고 있지만 MySQL을 사용한 GTID 기반 복제에 대해 잘 알지 못하는 경우 MySQL 설명서의 전역 트랜잭션 식별자를 사용한 복제에서 배경 정보를 참조하세요.

GTID 기반 복제는 RDS for MySQL 버전 5.7.23 이상의 MySQL 5.7 버전 및 RDS for MySQL 8.0.26 이상의 MySQL 8.0 버전에 대해서만 지원됩니다. 복제 구성의 모든 MySQL DB 인스턴스가 이 요구 사항을 충족해야 합니다.

전역 트랜잭션 식별자(GTID) 개요

전역 트랜잭션 ID(GTIDs) are unique identifiers generated for committed MySQL transactions. GTID를 사용해 binlog 복제 관련 문제를 더 간편하게 해결할 수 있습니다.

MySQL은 binlog 복제에 다음 두 가지 유형의 트랜잭션을 사용합니다.

  • GTID 트랜잭션 – GTID로 식별되는 트랜잭션.

  • 익명 트랜잭션 – GTID가 할당되지 않은 트랜잭션.

복제 구성의 GTID는 모든 DB 인스턴스에서 고유합니다. GTID를 사용하면 로그 파일 위치를 참조할 필요가 없기 때문에 복제 구성이 간편해집니다. 또한 GTID를 사용하면 복제된 트랜잭션을 추적하고 소스 인스턴스 및 복제본이 일치하는지를 쉽게 확인할 수 있습니다.

GTID 기반 복제를 사용하여 RDS for MySQL 읽기 전용 복제본으로 데이터를 복제할 수 있습니다. 읽기 전용 복제본을 새로 생성할 때 GTID 기반 복제를 구성할 수 있습니다. 또는 기존 읽기 전용 복제본을 GTID 기반 복제를 사용하도록 변환할 수 있습니다.

RDS for MySQL을 사용하여 지연된 복제 구성에서 GTID 기반 복제를 사용할 수도 있습니다. 자세한 정보는 MySQL을 사용한 지연 복제 구성을 참조하세요.

GTID 기반 복제 파라미터

다음 파라미터를 사용하여 GTID 기반 복제를 구성할 수 있습니다.

파라미터 유효한 값 설명

gtid_mode

OFF, OFF_PERMISSIVE, ON_PERMISSIVE, ON

OFF는 새 트랜잭션을 익명 트랜잭션(GTID가 없음)으로 지정하며, 트랜잭션을 복제하려면 익명이어야 합니다.

OFF_PERMISSIVE는 새 트랜잭션을 익명 트랜잭션(GTID가 없음)으로 지정하지만, 모든 트랜잭션을 복제할 수 있습니다.

ON_PERMISSIVE는 새 트랜잭션을 GTID 트랜잭션으로 지정하지만, 모든 트랜잭션을 복제할 수 있습니다.

ON은 새 트랜잭션을 GTID 트랜잭션으로 지정하고, 트랜잭션을 복제하려면 GTID 트랜잭션이어야 합니다.

enforce_gtid_consistency

OFF, ON, WARN

OFF는 트랜잭션이 GTID 일관성을 위반하는 것을 허용합니다.

ON은 트랜잭션이 GTID 일관성을 위반하지 않도록 합니다.

WARN은 트랜잭션이 GTID 일관성을 위반하는 것을 허용하지만, 위반이 발생할 경우 경고를 생성합니다.

참고

AWS Management Console 콘솔에서 gtid_mode 파라미터는 gtid-mode로 표시됩니다.

GTID 기반 복제의 경우 DB 인스턴스 또는 읽기 전용 복제본의 파라미터 그룹에 대해 이 설정을 사용하십시오.

  • ONON_PERMISSIVE는 RDS DB 인스턴스에서 밖으로 복제하는 경우에만 적용됩니다. 복제되는 트랜잭션에 대해 이 두 값으로 인해 RDS DB 인스턴스가 GTID를 사용하게 됩니다. ON은 대상 데이터베이스에서도 GTID 기반 복제를 사용할 것을 요구합니다. ON_PERMISSIVE로 인해 외부 데이터베이스에서 GTID 기반 복제는 선택 사항이 됩니다.

  • OFF_PERMISSIVE가 설정된 경우 이는 RDS DB 인스턴스가 소스 데이터베이스에서 안으로 복제하는 것을 수락할 수 있음을 뜻합니다. 소스 데이터베이스가 GTID 기반 복제를 사용하든, 사용하지 않든 수락이 가능합니다.

  • OFF가 설정된 경우 이는 RDS DB 인스턴스가 GTID 기반 복제를 사용하지 않는 소스 데이터베이스에서 안으로 복제하는 것만을 수락할 수 있음을 뜻합니다.

파라미터 그룹에 대한 자세한 내용은 파라미터 그룹 작업 단원을 참조하십시오.

새 읽기 전용 복제본에 대한 GTID 기반 복제 구성

RDS for MySQL DB 인스턴스에 대해 GTID 기반 복제를 활성화하면 DB 인스턴스의 읽기 전용 복제본에 대해 GTID 기반 복제가 자동으로 구성됩니다.

새 읽기 전용 복제본에 대해 GTID 기반 복제를 활성화하려면
  1. DB 인스턴스와 연결된 파라미터 그룹에서 다음과 같이 파라미터가 설정되어 있는지 확인합니다.

    • gtid_modeON 또는 ON_PERMISSIVE

    • enforce_gtid_consistencyON

    파라미터 그룹을 사용한 구성 파라미터 설정에 대한 자세한 내용은 파라미터 그룹 작업 단원을 참조하십시오.

  2. DB 인스턴스의 파라미터 그룹을 변경한 경우 DB 인스턴스를 재부팅하십시오. 이 작업을 수행하는 방법에 대한 자세한 내용은 DB 인스턴스 재부팅 단원을 참조하십시오.

  3. DB 인스턴스의 읽기 전용 복제본을 한 개 이상 생성합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 읽기 전용 복제본 생성 단원을 참조하십시오.

Amazon RDS는 MASTER_AUTO_POSITION를 사용하여 MySQL DB 인스턴스와 읽기 전용 복제본 간에 GTID 기본 복제를 설정하려고 시도합니다. 이 시도가 실패할 경우 Amazon RDS는 읽기 전용 복제본이 있는 복제의 로그 파일 위치를 사용합니다. MASTER_AUTO_POSITION에 대한 자세한 내용은 MySQL 설명서에서 GTID 자동 배치를 참조하십시오.

기존 읽기 전용 복제본에 대한 GTID 기반 복제 구성

읽기 전용 복제본이 포함되어 있고 GTID 기반 복제를 사용하지 않는 기존 MySQL DB 인스턴스의 경우에는 DB 인스턴스와 읽기 전용 복제본 간에 GTID 기반 복제를 구성할 수 있습니다.

기존 읽기 전용 복제본에 대해 GTID 기반 복제를 활성화하려면
  1. DB 인스턴스 또는 모든 읽기 전용 복제본이 RDS for MySQL 버전 8.0.26보다 낮은 버전 8.0을 사용하는 경우 DB 인스턴스 또는 읽기 전용 복제본을 MySQL 8.0보다 높은 8.0.26으로 업그레이드합니다. RDS for MySQL 버전 8.0에 대한 GTID 기반 복제 지원

    자세한 내용은 MySQL DB 엔진 업그레이드을 참조하세요.

  2. (선택 사항) GTID 파라미터를 재설정하고 DB 인스턴스와 읽기 전용 복제본의 동작을 테스트합니다.

    1. DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 enforce_gtid_consistency 파라미터가 WARN으로 설정되어 있는지 확인합니다.

      파라미터 그룹을 사용한 구성 파라미터 설정에 대한 자세한 내용은 파라미터 그룹 작업 단원을 참조하십시오.

    2. DB 인스턴스의 파라미터 그룹을 변경한 경우 DB 인스턴스를 재부팅하십시오. 읽기 전용 복제본의 파라미터 그룹을 변경한 경우 읽기 전용 복제본을 재부팅합니다.

      자세한 내용은 DB 인스턴스 재부팅 섹션을 참조하세요.

    3. 보통의 워크로드로 DB 인스턴스와 읽기 전용 복제본을 실행하고 로그 파일을 모니터링합니다.

      GTID 비호환 트랜잭션에 대한 경고가 표시될 경우, GTID 호환 기능만 사용하도록 애플리케이션을 조정하십시오. 다음 단계로 진행하기 전에 DB 인스턴스에서 GTID 비호환 트랜잭션에 대한 경고가 표시되지 않는지 확인합니다.

  3. 읽기 전용 복제본이 모든 트랜잭션을 처리할 때까지 익명 트랜잭션을 허용하는 GTID 기반 복제에 대한 GTID 파라미터를 재설정합니다.

    1. DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 다음과 같이 파라미터가 설정되었는지 확인합니다.

      • gtid_modeON_PERMISSIVE

      • enforce_gtid_consistencyON

    2. DB 인스턴스의 파라미터 그룹을 변경한 경우 DB 인스턴스를 재부팅하십시오. 읽기 전용 복제본의 파라미터 그룹을 변경한 경우 읽기 전용 복제본을 재부팅합니다.

  4. 익명 트랜잭션이 모두 복제될 때까지 기다립니다. 이러한 트랜잭션이 복제되었는지 확인하려면 다음과 같이 합니다.

    1. 소스 DB 인스턴스에서 다음 문을 실행합니다.

      SHOW MASTER STATUS;

      FilePosition 열의 값을 메모합니다.

    2. 각 읽기 전용 복제본에서 이전 단계에서 메모한 소스 인스턴스의 파일 및 위치 정보를 사용하여 다음 쿼리를 실행합니다.

      SELECT MASTER_POS_WAIT('file', position);

      예를 들어, 파일 이름이 mysql-bin-changelog.000031이고 위치가 107일 경우 다음 명령문을 실행합니다.

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);

      읽기 전용 복제본이 지정된 위치에 전달되면 쿼리가 즉시 반환합니다. 그렇지 않으면 함수가 대기합니다. 모든 읽기 전용 복제본에 대해 쿼리가 반환하면 다음 단계로 진행합니다.

  5. GTID 기반 복제에 대해서만 GTID 파라미터를 재설정합니다.

    1. DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 다음과 같이 파라미터가 설정되었는지 확인합니다.

      • gtid_modeON

      • enforce_gtid_consistencyON

    2. DB 인스턴스와 각 읽기 전용 복제본을 재부팅합니다.

  6. 각각의 읽기 전용 복제본에서 다음 프로시저를 실행합니다.

    CALL mysql.rds_set_master_auto_position(1);

읽기 전용 복제본이 포함된 MySQL DB 인스턴스에 대해 GTID 기반 복제 비활성화

읽기 전용 복제본이 포함된 MySQL DB 인스턴스입니다.

읽기 전용 복제본이 포함된 MySQL DB 인스턴스에 대해 GTID 기반 복제 사용 중지
  1. 각각의 읽기 전용 복제본에서 다음 프로시저를 실행합니다.

    CALL mysql.rds_set_master_auto_position(0); (Aurora MySQL version 2) CALL mysql.rds_set_source_auto_position(0); (Aurora MySQL version 3)
  2. gtid_modeON_PERMISSIVE로 재설정합니다.

    1. MySQL DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 gtid_mode 파라미터가 ON_PERMISSIVE로 설정되어 있는지 확인합니다.

      파라미터 그룹을 사용한 구성 파라미터 설정에 대한 자세한 내용은 파라미터 그룹 작업 단원을 참조하십시오.

    2. MySQL DB 인스턴스와 각 읽기 전용 복제본을 재부팅합니다. 재부팅에 대한 자세한 내용은 DB 인스턴스 재부팅 단원을 참조하십시오.

  3. gtid_modeOFF_PERMISSIVE로 재설정합니다.

    1. MySQL DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 gtid_mode 파라미터가 OFF_PERMISSIVE로 설정되어 있는지 확인합니다.

    2. MySQL DB 인스턴스와 각 읽기 전용 복제본을 재부팅합니다.

  4. 모든 읽기 전용 복제본에서 모든 GTID 트랜잭션이 적용될 때까지 기다립니다. 이러한 트랜잭션이 적용되었는지 확인하려면 다음과 같이 합니다.

    Aurora 기본 인스턴스에서 모든 GTID 트랜잭션이 적용될 때까지 기다립니다. 이러한 트랜잭션이 적용되었는지 확인하려면 다음과 같이 합니다.

    1. MySQL DB 인스턴스에서 SHOW MASTER STATUS 명령을 실행합니다.

      다음과 유사하게 출력되어야 합니다.

      File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------

      출력에서 파일 및 위치를 메모합니다.

    2. 각 읽기 전용 복제본에서 이전 단계에서 메모한 소스 인스턴스의 파일 및 위치 정보를 사용하여 다음 쿼리를 실행합니다.

      SELECT MASTER_POS_WAIT('file', position);

      예를 들어, 파일 이름이 mysql-bin-changelog.000031이고 위치가 107일 경우 다음 명령문을 실행합니다.

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);

      읽기 전용 복제본이 지정된 위치에 전달되면 쿼리가 즉시 반환합니다. 그렇지 않으면 함수가 대기합니다. 쿼리가 모든 읽기 전용 복제본에 대해 반환을 완료하면 다음 단계를 진행합니다.

  5. GTID 기반 복제를 비활성화하도록 GTID 파라미터를 재설정합니다.

    1. MySQL DB 인스턴스 및 각 읽기 전용 복제본과 연결된 파라미터 그룹에서 다음과 같이 파라미터가 설정되었는지 확인합니다.

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

    2. MySQL DB 인스턴스와 각 읽기 전용 복제본을 재부팅합니다.