주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
OCI GoldenGate를 사용하여 두 Oracle Heatwave MySQL 관리 인스턴스 간에 양방향 복제 설정
소개
Oracle Cloud Infrastructure GoldenGate(OCI GoldenGate)는 데이터 엔지니어가 하나 이상의 데이터 관리 시스템에서 OCI 데이터베이스로 데이터를 실시간으로 대규모로 이동할 수 있도록 지원하는 완전 관리형 서비스입니다. 컴퓨팅 환경을 할당하거나 관리할 필요 없이 단일 인터페이스에서 데이터 복제 작업을 설계, 실행, 통합관리 및 모니터링할 수 있습니다. OCI GoldenGate은 MySQL 및 Oracle HeatWave MySQL 데이터베이스 서비스를 비롯한 여러 소스 및 대상을 지원합니다.
이 사용지침서에서는 OCI의 두 Oracle HeatWave MySQL 인스턴스 간에 OCI GoldenGate를 사용하여 양방향 복제를 설정하는 방법을 안내합니다.
목표
- OCI의 OCI GoldenGate를 사용하여 두 Oracle HeatWave MySQL 관리 인스턴스 간에 양방향 복제를 설정합니다.
필요 조건
-
소스 및 대상 Oracle HeatWave MySQL 인스턴스는
InnoDB
엔진을 사용해야 하며5.7
또는8.*
버전에서 실행 중이어야 합니다. -
양방향 복제의 경우 소스 및 대상에서 동일한 버전의 MySQL 인스턴스를 사용하는 것이 좋습니다.
-
소스 및 대상 인스턴스의
binlog_expire_logs_second
인스턴스 매개변수는 72시간 이상으로 설정해야 합니다. -
DDL(데이터 정의어) 복제를 허용하려면 소스 및 대상 인스턴스의
binlog_row_metadata
인스턴스 매개변수를 전체로 설정해야 합니다.주: 인스턴스 매개변수는 사용자정의 구성을 생성해야만 변경할 수 있습니다. 자세한 내용은 MySQL에 대한 사용자정의 구성 생성을 참조하십시오.
-
지원되는 데이터 유형을 검토합니다. 자세한 내용은 MySQL: 지원되는 데이터 유형, 객체 및 작업을 참조하십시오.
-
DDL 복제 제한 사항을 검토합니다. 자세한 내용은 Using DDL Replication을 참조하십시오.
-
대상 인스턴스는 다음 방법 중 하나를 사용하여 소스에서 미리 생성해야 합니다.
- 방법 1:
util.dumpInstance
및util.loadDump
와 같은 MySQL 셸 유틸리티를 사용합니다. - 방법 2: OCI 콘솔 기반 백업 및 복원 옵션을 통해.
- 방법 3: 초기 Extract 및 Replicat에 OCI GoldenGate를 사용하여 초기 데이터 로드를 수행합니다. 이 튜토리얼에서는 이 방법이 사용되었습니다(작업 7).
- 방법 1:
-
설계상 하트비트 테이블 DDL은 Extract에 의해 무시됩니다. 대상에 수동으로 하트비트 테이블을 만들어야 합니다.
-
MySQL 클라이언트가 설치된 배스천 호스트입니다.
-
소스, 대상, 배스천 및 OCI GoldenGate 간 통신을 허용하는 수신 규칙 및 업데이트된 보안 목록입니다.
작업 1: OCI 배치 GoldenGate
-
OCI 콘솔에 로그인하여 GoldenGate을 검색하고 GoldenGate 서비스를 선택한 다음 배치 생성을 누릅니다.
-
다음 정보를 입력하고 Create(만들기)를 누릅니다.
- 이름:
MySQLggdeployment1
을 입력합니다. - 배포 유형: 데이터 복제를 선택합니다.
- 기술 선택: MySQL을 선택합니다.
- 버전 선택:
21.15
을 입력합니다. - 하드웨어 구성: OCPU의 #을 입력합니다.
- 서브넷 선택: 서브넷을 선택합니다.
- 라이센스 유형 라이센스 유형을 선택합니다.
- 인스턴스 이름:
GGInstance1
를 입력합니다. - 인증서 저장소: GoldenGate을 선택합니다(새 비밀번호 암호를 생성하거나 기존 비밀번호를 선택).
- 이름:
작업 2: Oracle HeatWave MySQL 인스턴스에서 사용자 생성
-
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 배치에서 접속 설정
-
OCI GoldenGate 배치 페이지로 이동하고 접속을 눌러 접속을 설정합니다.
-
접속 정보를 입력하십시오.
-
위의 단계를 반복하여 소스 및 대상 연결을 모두 추가합니다.
-
배치를 선택하고 지정된 접속을 눌러 배치에 접속을 지정합니다.
작업 4: OCI GoldenGate 콘솔에 대한 수신 규칙 및 보안 목록 설정
-
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
-
OCI 콘솔 및 OCI GoldenGate 콘솔을 통해 소스 및 대상 데이터베이스 모두에 대한 접속을 테스트합니다.
-
OCI 콘솔 내에서 MySQL 인스턴스 접속을 검증합니다.
-
OCI GoldenGate 콘솔에서 동일한 접속을 검증합니다.
-
작업 5: 추출 및 복제 프로세스 생성
-
기본 Extract(
EXT1
)를 생성합니다.-
OCI GoldenGate 콘솔에 로그인합니다.
-
개요로 이동하고 추출 섹션에서 +를 누릅니다.
-
추출 정보를 입력합니다.
-
필요한 경우 파라미터 파일을 편집합니다. 다음 매개변수 파일은 DDL 변경사항을 포함하여
classicmodels
데이터베이스의 모든 변경사항을 캡처합니다.EXTRACT ext1 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate EXTTRAIL e1 DDL INCLUDE MAPPED TRANLOGOPTIONS FETCHPARTIALJSON TABLE classicmodels.*;
주:
MySQLpoc1
은 소스 인스턴스입니다. -
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를 시작하고 항상 실행 상태를 유지합니다.
-
-
기본 Replicat(
REP1
)를 생성합니다.-
OCI GoldenGate 콘솔에 로그인합니다.
-
개요로 이동하고 복제 섹션에서 +를 누릅니다.
주: 체크포인트 테이블 이름 앞에 데이터베이스/스키마 이름을 소문자로 붙여야 합니다. 그렇지 않으면 체크포인트 테이블 생성이 실패합니다.
예:
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)
-
필요한 경우 파라미터 파일을 편집합니다. 다음 매개변수 파일은 DDL 변경 사항과 함께
classicmodels
데이터베이스 아래의 모든 객체를 복제합니다.REPLICAT rep1 USERIDALIAS MySQLpoc2, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP classicmodels.*, TARGET classicmodels.*;
주:
MySQLpoc2
은 대상 인스턴스입니다. -
이 Replicat는 기본 Replicat이며 처음으로 시작되었으므로 추적 파일 0에서 적용을 시작합니다. 그러나 특정 GTID에서 시작하도록 Replicat를 변경하려면 다음 단계를 수행하십시오.
-
OCI GoldenGate 콘솔의 복제 섹션으로 이동합니다.
-
복제본을 선택하고 변경, 편집, BEGIN을 누른 다음 GTID를 선택하고 GTID를 입력합니다.
-
-
-
지금까지는 DML(데이터 조작어) 및 DDL 복제에 대해 단방향을 설정했습니다. 단방향 복제가 동기화되면 양방향 복제를 진행할 수 있습니다.
-
5.1단계와 5.2단계를 반복하지만 이번에는 소스 및 대상 세부 정보를 반대로 합니다. 이제 소스 데이터베이스 인스턴스가 대상 인스턴스로 작동하고 대상 인스턴스가 소스 인스턴스로 작동합니다.
- 소스:
MySQLpoc2
를 입력합니다. - 대상:
MySQLpoc1
을 입력합니다. - 이 사용 사례에서는 두번째 데이터베이스
airportdb
를 사용했습니다. 동일한 데이터베이스에 대해 양방향 복제를 설정할 수 있습니다.
- 소스:
-
기본 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.*;
-
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: 초기 로드 추출 설정
-
OCI GoldenGate를 활용하여 대상 데이터베이스로의 초기 데이터 로드를 수행하려면 초기 로드 추출을 설정합니다.
-
OCI GoldenGate 콘솔에 로그인합니다.
-
개요로 이동하고 추출 섹션에서 +를 누릅니다. 이는 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
-
-
마찬가지로 초기 로드 Extract에 의해 생성된 추적 파일을 읽을 Replicat를 설정합니다. 이 Replicat 및 초기 로드 Extract는 초기 로드가 완료되면 모두 삭제됩니다.
-
Target Database에서 모든 테이블이 비어 있는지 확인합니다. 대상에서 모든 외래 키를 삭제/사용 안함으로 설정합니다. 초기 로드 성능을 향상시키려면 대상에서 트리거 및 인덱스를 사용 안함으로 설정합니다.
주: 삭제하기 전에 스키마 객체 DDL에 대한 백업을 수행하십시오.
-
다음은 초기 데이터 로드에 대해 Extract 초기 로드를 사용할 경우 Extract 및 Replicat 프로세스가 생성되어야 하는 순서입니다.
-
소스에 대한 기본 Extract를 생성합니다. 아직 프로세스를 시작하지 마십시오.
-
소스에 대한 초기 로드 Extract를 생성하고(아직 프로세스를 시작하지 않음) 소스에서 GTID를 캡처합니다.
-
Replicat를 생성하여 대상에 대한 초기 로드 Extract에 의해 생성된 추적 파일을 처리합니다(아직 프로세스를 시작하지 마십시오).
주: 초기 로드에는 별도의 Replicat 유형이 없습니다.
-
대상에 대한 기본 Replicat를 생성합니다. 아직 프로세스를 시작하지 마십시오.
-
초기 로드 Replicat와 기본 Replicat에 대해 동일한 체크포인트 테이블을 사용합니다. 초기 로드 Replicat는 초기 Extract 추적 파일을 가리키고 기본 Replicat는 기본 Extract 추적 파일을 가리킵니다(두 추적 파일이 다름).
-
-
다음은 초기 로드 Extract를 사용할 때 프로세스가 시작되어야 하는 순서입니다.
-
기본 Extract를 시작하고 등록한 GTID를 기록해 둡니다.
-
초기 로드 Extract에 대해 생성된 Replicat를 시작합니다.
-
초기 로드 Extract를 편집하고 기본 Extract를 시작할 때 얻은 GTID로 시작하도록 변경합니다.
-
기본 Replicat를 시작합니다.
참고:
- 초기 로드 Extract와 Replicat가 모두 동기화된 후에만 기본 Replicat를 시작합니다(LAG 0).
- 기본 Replicat를 시작하기 전에 외래 키를 생성하거나 사용으로 설정합니다.
기본 Replicat를 시작하기 전에 인덱스를 생성(초기 로드 성능을 향상시키기 위해 인덱스를 삭제한 경우)합니다.
-
-
제한
-
Classic 및 Coordinated Replicats만 양방향 및 다방향 복제를 지원하며 병렬 Replicat는 지원되지 않습니다.
-
자동 증가 열 문제입니다.
-
테이블에 하나의 열이 있고 기본 키나 고유 키가 아닌 경우 해당 테이블의 모든 열 조합이 소스와 대상에서 동일하기 때문에 매핑이 실패합니다.
-
데이터 유형, DDL 및 기타 기능이 제한됩니다.
-
Active-Active 복제를 사용하는 경우 시간 기록 기반 충돌 해결 및 감지가 작동하려면 두 시스템에서 시간대가 동일해야 합니다.
관련 링크
확인
- 작성자 - Chakradhar Jagganagari(LIFT 구현 전문가 - 맞춤형, 타사, VM 데이터베이스 및 앱)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Set up Bidirectional Replication Between Two Oracle Heatwave MySQL managed instances using OCI GoldenGate
G29686-02
Copyright ©2025, Oracle and/or its affiliates.