ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
OCI GoldenGateを使用した、2つのOracle Heatwave MySQL管理対象インスタンス間の双方向レプリケーションの設定
イントロダクション
Oracle Cloud Infrastructure GoldenGate (OCI GoldenGate)は、データ・エンジニアが1つ以上のデータ管理システムからOCIデータベースにデータをリアルタイムで大規模に移動するのに役立つフル・マネージド・サービスです。コンピュート環境の割当てや管理を行わずに、データ・レプリケーション・タスクを1つのインタフェースで設計、実行、調整およびモニターします。OCI GoldenGateは、MySQLやOracle HeatWave MySQLデータベース・サービスなど、複数のソースおよびターゲットをサポートしています。
このチュートリアルでは、OCIの2つのOracle HeatWave MySQLインスタンス間でOCI GoldenGateを使用して双方向レプリケーションを設定する方法について説明します。
目的
- OCIのOCI GoldenGateを使用して、2つのOracle HeatWave MySQL管理対象インスタンス間の双方向レプリケーションを設定します。
前提条件
-
ソースおよびターゲットのOracle HeatWave MySQLインスタンスは、
InnoDB
エンジンを使用している必要があり、バージョン5.7
または8.*
で実行されている必要があります。 -
双方向レプリケーションの場合、ソースとターゲットで同じバージョンのMySQLインスタンスを使用することをお薦めします。
-
ソース・インスタンスおよびターゲット・インスタンスの
binlog_expire_logs_second
インスタンス・パラメータは、少なくとも72時間に設定する必要があります。 -
データ定義言語(DDL)レプリケーションを許可するには、ソース・インスタンスおよびターゲット・インスタンスの
binlog_row_metadata
インスタンス・パラメータをフルに設定する必要があります。ノート:インスタンス・パラメータは、カスタム構成を作成することによってのみ変更できます。詳細は、Creating a Custom Configuration for MySQLを参照してください。
-
サポートされているデータ型を確認します。詳細は、MySQL: サポートされているデータ型、オブジェクトおよび操作を参照してください。
-
DDLレプリケーションの制限を確認します。詳細は、「DDLレプリケーションの使用」を参照してください。
-
次のいずれかの方法を使用して、ターゲット・インスタンスをソースから事前に作成する必要があります。
- 方法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 Bastionコンピュート間の通信を許可します。
ノート: VPNを使用している場合は、このステップは省略できます。
次のステップに従います: オプションB: OCI Computeで独自の要塞を使用。
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およびReplicatプロセスの作成
-
プライマリExtract (
EXT1
)を作成します。-
OCI GoldenGateコンソールにログインします。
-
「概要」に移動し、「抽出」セクションの「+」をクリックします。
-
Extract情報を入力します。
-
必要に応じてパラメータ・ファイルを編集します。次のパラメータ・ファイルは、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>
Extractを起動し、すべての変更が確実に取得されるようにターゲット・データベースの設定で作業している場合でも、常に実行し続けます。
-
-
プライマリReplicat (
REP1
)を作成します。-
OCI GoldenGateコンソールにログインします。
-
「概要」に移動し、「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)
-
必要に応じてパラメータ・ファイルを編集します。次のパラメータ・ファイルは、
classicmodels
データベースのすべてのオブジェクトをDDL変更とともにレプリケートします。REPLICAT rep1 USERIDALIAS MySQLpoc2, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP classicmodels.*, TARGET classicmodels.*;
ノート:
MySQLpoc2
はターゲット・インスタンスです。 -
これはプライマリReplicatであり、初めて起動されたため、証跡ファイル0から適用を開始します。ただし、Replicatを特定のGTIDから開始するように変更する場合は、次のステップを実行します。
-
OCI GoldenGateコンソールの「Replicat」セクションに移動します。
-
Replicatを選択し、「変更」、「編集」、「BEGIN」の順にクリックし、GTIDを選択してGTIDを入力します。
-
-
-
これまでのところ、データ操作言語(DML)とDDLレプリケーションの両方に対して単方向を設定しています。一方向レプリケーションが同期されたら、双方向レプリケーションを続行できます。
-
ステップ5.1とステップ5.2を繰り返しますが、今回はソースとターゲットの詳細を逆にします。ソース・データベース・インスタンスがターゲット・インスタンスとして機能し、ターゲット・インスタンスがソース・インスタンスとして機能します。
- ソース:
MySQLpoc2
と入力します。 - ターゲット:
MySQLpoc1
と入力します。 - このユースケースでは、2番目のデータベース
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.*;
-
これがクラシックReplicatであるため、チェックポイント表を手動で作成します。双方向レプリケーションでは、クラシックおよび調整済のReplicatのみがサポートされています。
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を利用してターゲット・データベースへのデータの初期ロードを実行する場合は、初期ロードExtractを設定します。
-
OCI GoldenGateコンソールにログインします。
-
「概要」に移動し、「抽出」セクションの「+」をクリックします。これはプライマリExtractの作成によく似ていますが、唯一の違いは、Extractの作成時に「初期ロード」として「抽出タイプ」を選択することです。
初期ロード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の両方が削除されます。
-
ターゲット・データベースで、すべての表が空であることを確認します。ターゲット上のすべての外部キーの削除/無効化。初期ロード・パフォーマンスを向上させるには、「ターゲットでのトリガーおよび索引の無効化」を参照してください。
ノート:スキーマ・オブジェクト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の両方が同期(LAG 0)になった後にのみ、プライマリReplicatを起動します。
- プライマリReplicatを起動する前に、外部キーを作成または有効化します。
プライマリReplicatを起動する前に、索引を作成します(初期ロード・パフォーマンスを向上させるために以前に削除した場合)。
-
-
制限事項
-
クラシックおよび調整Replicatのみが双方向および複数方向レプリケーションをサポートし、パラレルReplicatはサポートされていません。
-
列の問題を自動増分します。
-
表に1つの列があり、主キーまたは一意キーではない場合、その表のすべての列の組合せがソースとターゲットで同じであるため、マッピングは失敗します。
-
データ型、DDLおよびその他の機能制限。
-
アクティブ/アクティブ型のレプリケーションを使用する場合は、タイムゾーンを両方のシステムで同じにする必要があるため、そのタイムスタンプベースの競合解決および検出を動作できます。
関連リンク
承認
- 作成者 - Chakradhar Jagganagari (LIFTインプリメンテーション・スペシャリスト- カスタム、サード・パーティ、VMデータベースおよびアプリケーション)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Set up Bidirectional Replication Between Two Oracle Heatwave MySQL managed instances using OCI GoldenGate
G29685-02
Copyright ©2025, Oracle and/or its affiliates.