주:

OCI GoldenGate를 사용하여 두 Oracle Heatwave MySQL 관리 인스턴스 간에 양방향 복제 설정

소개

Oracle Cloud Infrastructure GoldenGate(OCI GoldenGate)는 데이터 엔지니어가 하나 이상의 데이터 관리 시스템에서 OCI 데이터베이스로 데이터를 실시간으로 대규모로 이동할 수 있도록 지원하는 완전 관리형 서비스입니다. 컴퓨팅 환경을 할당하거나 관리할 필요 없이 단일 인터페이스에서 데이터 복제 작업을 설계, 실행, 통합관리 및 모니터링할 수 있습니다. OCI GoldenGate은 MySQL 및 Oracle HeatWave MySQL 데이터베이스 서비스를 비롯한 여러 소스 및 대상을 지원합니다.

이 사용지침서에서는 OCI의 두 Oracle HeatWave MySQL 인스턴스 간에 OCI GoldenGate를 사용하여 양방향 복제를 설정하는 방법을 안내합니다.

목표

필요 조건

작업 1: OCI 배치 GoldenGate

  1. OCI 콘솔에 로그인하여 GoldenGate을 검색하고 GoldenGate 서비스를 선택한 다음 배치 생성을 누릅니다.

  2. 다음 정보를 입력하고 Create(만들기)를 누릅니다.

    • 이름: MySQLggdeployment1을 입력합니다.
    • 배포 유형: 데이터 복제를 선택합니다.
    • 기술 선택: MySQL을 선택합니다.
    • 버전 선택: 21.15을 입력합니다.
    • 하드웨어 구성: OCPU의 #을 입력합니다.
    • 서브넷 선택: 서브넷을 선택합니다.
    • 라이센스 유형 라이센스 유형을 선택합니다.
    • 인스턴스 이름: GGInstance1를 입력합니다.
    • 인증서 저장소: GoldenGate을 선택합니다(새 비밀번호 암호를 생성하거나 기존 비밀번호를 선택).

작업 2: Oracle HeatWave MySQL 인스턴스에서 사용자 생성

  1. OCI Bastion 호스트를 사용하여 소스 및 대상 MySQL 인스턴스에 연결하고 OCI GoldenGate Extract 및 Replicat 프로세스에 대한 사용자를 생성합니다. 다음 질의를 실행합니다.

    • 소스 MySQL 인스턴스에서.

      > create user 'ggsuser_S'@'%' identified by "<password>";
      > grant all privileges on airportdb.* to 'ggsuser_S'@'%' with grant option;
      > Grant select,  process, replication slave, replication client on *.* to 'ggsuser_S'@'%';
      
    • 대상 MySQL 인스턴스.

      > create user 'ggsuser_T'@'%' identified by "<password>";
      > grant all privileges on airportdb.* to 'ggsuser_T'@'%' with grant option;
      > Grant select,  process, replication slave, replication client on *.* to 'ggsuser_T'@'%';
      

작업 3: OCI GoldenGate 배치에서 접속 설정

  1. OCI GoldenGate 배치 페이지로 이동하고 접속을 눌러 접속을 설정합니다.

    연결을 만드는 방법을 보여주는 이미지

  2. 접속 정보를 입력하십시오.

    GoldenGate 접속을 보여주는 이미지

  3. 위의 단계를 반복하여 소스 및 대상 연결을 모두 추가합니다.

  4. 배치를 선택하고 지정된 접속을 눌러 배치에 접속을 지정합니다.

    배치에 접속을 지정하는 방법을 보여주는 이미지

작업 4: OCI GoldenGate 콘솔에 대한 수신 규칙 및 보안 목록 설정

  1. Oracle HeatWave MySQL 인스턴스, OCI GoldenGate 배치 및 OCI 배스천 컴퓨트 간 통신을 허용하도록 수신 규칙을 설정하고 보안 목록을 업데이트합니다.

    참고: VPN을 사용하는 경우 이 단계를 건너뛸 수 있습니다.

    옵션 B: OCI 컴퓨트에 고유 배스천 사용에 나열된 단계를 따릅니다.

    ssh -i <private-ssh-key-of-bastion-compute> opc@<bastion-compute-public-ip> -L 443:<GoldenGategate-deployment-hostname>:443 -N
    
  2. OCI 콘솔 및 OCI GoldenGate 콘솔을 통해 소스 및 대상 데이터베이스 모두에 대한 접속을 테스트합니다.

    1. OCI 콘솔 내에서 MySQL 인스턴스 접속을 검증합니다.

      연결 테스트 방법을 보여주는 이미지

    2. OCI GoldenGate 콘솔에서 동일한 접속을 검증합니다.

      GG 콘솔에서 연결을 테스트하는 방법을 보여주는 이미지

작업 5: 추출 및 복제 프로세스 생성

  1. 기본 Extract(EXT1)를 생성합니다.

    1. OCI GoldenGate 콘솔에 로그인합니다.

    2. 개요로 이동하고 추출 섹션에서 +를 누릅니다.

      EXTRACT를 추가하는 방법을 보여주는 이미지

    3. 추출 정보를 입력합니다.

      EXTRACT 세부정보를 보여주는 이미지

    4. 필요한 경우 파라미터 파일을 편집합니다. 다음 매개변수 파일은 DDL 변경사항을 포함하여 classicmodels 데이터베이스의 모든 변경사항을 캡처합니다.

      EXTRACT ext1
      USERIDALIAS  MySQLpoc1, DOMAIN OracleGoldenGate
      EXTTRAIL e1
      DDL INCLUDE MAPPED
      TRANLOGOPTIONS FETCHPARTIALJSON
      TABLE classicmodels.*;
      

      주: MySQLpoc1은 소스 인스턴스입니다.

    5. Extract를 시작하고 소스에서 GTID(전역 트랜잭션 식별자)를 기록해 둡니다.

      MySQL>  select @@gtid_executed, @@gtid_purged\G
      *************************** 1. row ***************************
      @@gtid_executed: 3b631a96-6aa7-11ef-95c0-02001701769c:1-94    <--- make a note of this GTID
      @@gtid_purged: 3b631a96-6aa7-11ef-95c0-02001701769c:1-72
      1 row in set (0.00 sec)
      MySQL>
      

      모든 변경 사항이 캡처되도록 Target Database를 설정하는 작업을 하는 경우에도 Extract를 시작하고 항상 실행 상태를 유지합니다.

  2. 기본 Replicat(REP1)를 생성합니다.

    1. OCI GoldenGate 콘솔에 로그인합니다.

    2. 개요로 이동하고 복제 섹션에서 +를 누릅니다.

      REPLICAT 세부정보를 보여주는 이미지

      주: 체크포인트 테이블 이름 앞에 데이터베이스/스키마 이름을 소문자로 붙여야 합니다. 그렇지 않으면 체크포인트 테이블 생성이 실패합니다.

      예: classicmodels.OCIGG_CHECKPOINT_REP1.

      체크포인트 테이블에 대해 별도의 전용 데이터베이스/스키마(예: ggadmin 스키마)를 생성하는 것이 좋습니다.

      MySQL> create database ggadmin;
      Query OK, 1 row affected (0.01 sec)
      MySQL> grant all privileges on ggadmin.* to 'ggsuser_T'@'%' with grant option;
      Query OK, 0 rows affected (0.00 sec)
      MySQL> grant all privileges on ggadmin.* to 'ggsuser_S'@'%' with grant option;
      Query OK, 0 rows affected (0.00 sec)
      
    3. 필요한 경우 파라미터 파일을 편집합니다. 다음 매개변수 파일은 DDL 변경 사항과 함께 classicmodels 데이터베이스 아래의 모든 객체를 복제합니다.

      REPLICAT rep1
      USERIDALIAS  MySQLpoc2, DOMAIN OracleGoldenGate
      DDL INCLUDE MAPPED
      MAP classicmodels.*, TARGET classicmodels.*;
      

      주: MySQLpoc2은 대상 인스턴스입니다.

    4. 이 Replicat는 기본 Replicat이며 처음으로 시작되었으므로 추적 파일 0에서 적용을 시작합니다. 그러나 특정 GTID에서 시작하도록 Replicat를 변경하려면 다음 단계를 수행하십시오.

      1. OCI GoldenGate 콘솔의 복제 섹션으로 이동합니다.

      2. 복제본을 선택하고 변경, 편집, BEGIN을 누른 다음 GTID를 선택하고 GTID를 입력합니다.

  3. 지금까지는 DML(데이터 조작어) 및 DDL 복제에 대해 단방향을 설정했습니다. 단방향 복제가 동기화되면 양방향 복제를 진행할 수 있습니다.

    1. 5.1단계와 5.2단계를 반복하지만 이번에는 소스 및 대상 세부 정보를 반대로 합니다. 이제 소스 데이터베이스 인스턴스가 대상 인스턴스로 작동하고 대상 인스턴스가 소스 인스턴스로 작동합니다.

      • 소스: MySQLpoc2를 입력합니다.
      • 대상: MySQLpoc1을 입력합니다.
      • 이 사용 사례에서는 두번째 데이터베이스 airportdb를 사용했습니다. 동일한 데이터베이스에 대해 양방향 복제를 설정할 수 있습니다.
    2. 기본 Extract(EXT2)를 추가합니다.

      EXTRACT ext2
      USERIDALIAS  MySQLpoc2, DOMAIN OracleGoldenGate
      EXTTRAIL e2
      DDL INCLUDE MAPPED
      TRANLOGOPTIONS FILTERTABLE ggadmin.OCIGG_CHECKPOINT_REP*  -- from 23ai GG use EXCLUDEFILTERTABLE
      TABLE airportdb.*;
      
    3. Classic Replicat이므로 수동으로 체크포인트 테이블을 생성합니다. 양방향 복제에는 Classic 및 Coordinated Replicats만 지원됩니다.

      For example: ggadmin.OCIGG*CHECKPOINT_REP`- Add primary REPLICAT REP2:` REPLICAT rep2
      USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate
      DDL INCLUDE MAPPED
      MAP airportdb.*, TARGET airportdb.\_;
      

작업 6: DDL 및 DML 테스트 실행

이제 양방향 설정이 완료되었으므로 간단한 DML 및 DDL 테스트를 실행할 때입니다.

--DML test from classicmodels database on source MySQLpoc1
MySQLpoc1> select count(*) from weatherdata;
+----------+
| count(*) |
+----------+
|  4626432 |
+----------+
1 row in set (0.19 sec)

MySQLpoc1> insert into weatherdata values ('2005-01-02','04:50:00',-8.1,3,57.0,990.00,38.00,'Nebel-Schneefall',61);
Query OK, 1 row affected (0.00 sec)

MySQLpoc1> select count(*) from weatherdata;
+----------+
| count(*) |
+----------+
|  4626433 |
+----------+
1 row in set (0.23 sec)

-DDL replication test from classicmodels database on source MySQLpoc1
MySQLpoc1> create table test (name char(5));
Query OK, 0 rows affected (0.02 sec)

MySQL> insert into test values ('cj');
Query OK, 1 row affected (0.00 sec)

MySQL>

--Now Let's check if the above DML and DDLs got replicated to target MySQLpoc2
MySQLpoc2> select count(*) from weatherdata;
+----------+
| count(*) |
+----------+
|  4626433 | <--- row count matches to source
+----------+
1 row in set (0.37 sec)

MySQLpoc2>
MySQLpoc2> select * from test;
+------+
| name |
+------+
| cj   |          <-- table CJ got replicated
+------+
1 row in set (0.00 sec)

MySQL>


-- Now testing Bi directional
-- on target (MySQLpoc2)
MySQLpoc2> select * from test;
+------+
| name |
+------+
| cj   |
+------+
1 row in set (0.00 sec)

MySQLpoc2> insert into test values ('cj2');
Query OK, 1 row affected (0.01 sec)

MySQLpoc2> select * from test;
+------+
| name |
+------+
| cj   |
| cj2  |
+------+
2 rows in set (0.00 sec)

MySQLpoc2> insert into test values ('cjs3');
Query OK, 1 row affected (0.00 sec)

MySQLpoc2> select * from test;
+------+
| name |
+------+
| cj   |
| cj2  |
| cjs3 |
+------+
3 rows in set (0.00 sec)

MySQLpoc2>

--On source (MySQLpoc1):
--DML on the target got REPLICATed on the source
MySQLpoc1> select * from test;
+------+
| name |
+------+
| cj   |
| cj2  |
| cjs3 |
+------+
3 rows in set (0.00 sec)

MySQL>

태스크 7: 초기 로드 추출 설정

  1. OCI GoldenGate를 활용하여 대상 데이터베이스로의 초기 데이터 로드를 수행하려면 초기 로드 추출을 설정합니다.

    1. OCI GoldenGate 콘솔에 로그인합니다.

    2. 개요로 이동하고 추출 섹션에서 +를 누릅니다. 이는 1차 추출을 생성하는 것과 매우 유사합니다. 유일한 차이점은 추출을 생성할 때 추출 유형초기 로드로 선택하는 것입니다.

      초기 로드 Extract에 대한 매개변수 파일입니다.

      Parameter file for initial load EXTRACT:
      EXTRACT EXTIL
      USERIDALIAS  MySQLpoc1, DOMAIN OracleGoldenGate
      EXTFILE il ,  PURGE
      TABLE airportdb.*;
      MAP_PARALLELISM 4
      MIN_APPLY_PARALLELISM 2
      MAX_APPLY_PARALLELISM 10
      SPLIT_TRANS_RECS 1000
      CHUNK_SIZE 1 GB
      
  2. 마찬가지로 초기 로드 Extract에 의해 생성된 추적 파일을 읽을 Replicat를 설정합니다. 이 Replicat 및 초기 로드 Extract는 초기 로드가 완료되면 모두 삭제됩니다.

    1. Target Database에서 모든 테이블이 비어 있는지 확인합니다. 대상에서 모든 외래 키를 삭제/사용 안함으로 설정합니다. 초기 로드 성능을 향상시키려면 대상에서 트리거 및 인덱스를 사용 안함으로 설정합니다.

      주: 삭제하기 전에 스키마 객체 DDL에 대한 백업을 수행하십시오.

    2. 다음은 초기 데이터 로드에 대해 Extract 초기 로드를 사용할 경우 Extract 및 Replicat 프로세스가 생성되어야 하는 순서입니다.

      1. 소스에 대한 기본 Extract를 생성합니다. 아직 프로세스를 시작하지 마십시오.

      2. 소스에 대한 초기 로드 Extract를 생성하고(아직 프로세스를 시작하지 않음) 소스에서 GTID를 캡처합니다.

      3. Replicat를 생성하여 대상에 대한 초기 로드 Extract에 의해 생성된 추적 파일을 처리합니다(아직 프로세스를 시작하지 마십시오).

        주: 초기 로드에는 별도의 Replicat 유형이 없습니다.

      4. 대상에 대한 기본 Replicat를 생성합니다. 아직 프로세스를 시작하지 마십시오.

      5. 초기 로드 Replicat와 기본 Replicat에 대해 동일한 체크포인트 테이블을 사용합니다. 초기 로드 Replicat는 초기 Extract 추적 파일을 가리키고 기본 Replicat는 기본 Extract 추적 파일을 가리킵니다(두 추적 파일이 다름).

    3. 다음은 초기 로드 Extract를 사용할 때 프로세스가 시작되어야 하는 순서입니다.

      1. 기본 Extract를 시작하고 등록한 GTID를 기록해 둡니다.

      2. 초기 로드 Extract에 대해 생성된 Replicat를 시작합니다.

      3. 초기 로드 Extract를 편집하고 기본 Extract를 시작할 때 얻은 GTID로 시작하도록 변경합니다.

      4. 기본 Replicat를 시작합니다.

        참고:

        • 초기 로드 Extract와 Replicat가 모두 동기화된 후에만 기본 Replicat를 시작합니다(LAG 0).
        • 기본 Replicat를 시작하기 전에 외래 키를 생성하거나 사용으로 설정합니다.

        기본 Replicat를 시작하기 전에 인덱스를 생성(초기 로드 성능을 향상시키기 위해 인덱스를 삭제한 경우)합니다.

제한

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.