ノート:

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を使用して双方向レプリケーションを設定する方法について説明します。

目的

前提条件

タスク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 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
    
  2. OCIコンソールおよびOCI GoldenGateコンソールで、ソース・データベースとターゲット・データベースの両方の接続をテストします。

    1. OCIコンソール内でMySQLインスタンス接続を検証します。

      接続のテスト方法を示す図

    2. OCI GoldenGateコンソールから同じ接続を検証します。

      GGコンソールで接続をテストする方法を示す図

タスク5: ExtractおよびReplicatプロセスの作成

  1. プライマリExtract (EXT1)を作成します。

    1. OCI GoldenGateコンソールにログインします。

    2. 「概要」に移動し、「抽出」セクションの「+」をクリックします。

      EXTRACTの追加方法を示す図

    3. Extract情報を入力します。

      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>
      

      Extractを起動し、すべての変更が確実に取得されるようにターゲット・データベースの設定で作業している場合でも、常に実行し続けます。

  2. プライマリReplicat (REP1)を作成します。

    1. OCI GoldenGateコンソールにログインします。

    2. 「概要」に移動し、「Replicat」セクションの「+」をクリックします。

      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. 必要に応じてパラメータ・ファイルを編集します。次のパラメータ・ファイルは、classicmodelsデータベースのすべてのオブジェクトをDDL変更とともにレプリケートします。

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

      ノート: MySQLpoc2はターゲット・インスタンスです。

    4. これはプライマリReplicatであり、初めて起動されたため、証跡ファイル0から適用を開始します。ただし、Replicatを特定のGTIDから開始するように変更する場合は、次のステップを実行します。

      1. OCI GoldenGateコンソールの「Replicat」セクションに移動します。

      2. Replicatを選択し、「変更」「編集」「BEGIN」の順にクリックし、GTIDを選択してGTIDを入力します。

  3. これまでのところ、データ操作言語(DML)とDDLレプリケーションの両方に対して単方向を設定しています。一方向レプリケーションが同期されたら、双方向レプリケーションを続行できます。

    1. ステップ5.1とステップ5.2を繰り返しますが、今回はソースとターゲットの詳細を逆にします。ソース・データベース・インスタンスがターゲット・インスタンスとして機能し、ターゲット・インスタンスがソース・インスタンスとして機能します。

      • ソース: MySQLpoc2と入力します。
      • ターゲット: MySQLpoc1と入力します。
      • このユースケースでは、2番目のデータベース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. これがクラシック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: 初期ロード抽出の設定

  1. OCI GoldenGateを利用してターゲット・データベースへのデータの初期ロードを実行する場合は、初期ロードExtractを設定します。

    1. OCI GoldenGateコンソールにログインします。

    2. 「概要」に移動し、「抽出」セクションの「+」をクリックします。これはプライマリ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
      
  2. 同様に、初期ロードExtractによって生成された証跡ファイルを読み取るReplicatを設定します。初期ロードが完了すると、このReplicatと初期ロードExtractの両方が削除されます。

    1. ターゲット・データベースで、すべての表が空であることを確認します。ターゲット上のすべての外部キーの削除/無効化。初期ロード・パフォーマンスを向上させるには、「ターゲットでのトリガーおよび索引の無効化」を参照してください。

      ノート:スキーマ・オブジェクト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の両方が同期(LAG 0)になった後にのみ、プライマリReplicatを起動します。
        • プライマリReplicatを起動する前に、外部キーを作成または有効化します。

        プライマリReplicatを起動する前に、索引を作成します(初期ロード・パフォーマンスを向上させるために以前に削除した場合)。

制限事項

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。