附註:

使用 OCI GoldenGate 設定兩個 Oracle Heatwave MySQL 受管理執行處理之間的雙向複製

簡介

Oracle Cloud Infrastructure GoldenGate (OCI GoldenGate) 是一項完全託管的服務,可協助資料工程師即時將資料大規模地從一或多個資料管理系統移轉至 OCI 資料庫。在單一介面中設計、執行、協調及監控資料複製作業,無須配置或管理任何運算環境。OCI GoldenGate 支援數個來源和目標,包括 MySQL 和 Oracle HeatWave MySQL 資料庫服務。

在本教學課程中,我們將指導您如何使用 OCI GoldenGate,在 OCI 中的兩個 Oracle HeatWave MySQL 執行處理之間設定雙向複寫。

目標

必要條件

作業 1:部署 OCI GoldenGate

  1. 登入 OCI 主控台,搜尋 GoldenGate ,選取 GoldenGate 服務,然後按一下建立部署

  2. 輸入下列資訊,然後按一下建立

    • 名稱:輸入 MySQLggdeployment1
    • 部署類型:選取資料複製
    • 選取技術 (Select Technology):選取 MySQL
    • 選取版本:輸入 21.15
    • 硬體組態: 輸入 # 個 OCPU。
    • 子網路選擇:選取子網路。
    • 授權類型:選取授權類型。
    • 執行處理名稱:輸入 GGInstance1
    • 證明資料存放區:選取 GoldenGate (建立新的密碼加密密碼或選取現有的密碼)。

作業 2:在 Oracle HeatWave MySQL 執行處理中建立使用者

  1. 使用 OCI 堡壘主機連線至來源和目標 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 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 詳細資訊的影像

    4. 視需要編輯參數檔。下列參數檔會擷取 classicmodels 資料庫中的所有變更,包括 DDL 變更。

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

      注意:MySQLpoc1 是來源執行處理。

    5. 啟動擷取並記下來源上的全域交易識別碼 (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,依序按一下更改編輯開始,然後選取 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. 手動建立檢查點表格,因為這是傳統 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 執行起始資料載入目標資料庫,請設定「起始載入擷取」。

    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. 同樣設定 Replicat,以讀取初始載入 Extract 所產生的歷程檔。初始載入完成後,將會刪除此 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 均同步後,才啟動主要 Replicat (LAG 0)。
        • 請先建立或啟用外來索引鍵,再啟動主要 Replicat。

        開始主要 Replicat 之前,請先建立索引 (如果您先將它們刪除以提升初始載入效能)。

限制

認可

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center