使用 MySQL Shell 公用程式和 Oracle GoldenGate 精確建立 MySQL 到 MySQL

精確的建立方法允許在來源資料庫保持連線以進行應用程式更新時,從來源資料庫初始載入資料至目標資料庫。此方法可確保變更資料擷取與傳遞處理作業的精確定位,在目標資料庫中沒有重複的資料,且無須在 Replicat 中使用 HANDLECOLLISIONS。

Oracle GoldenGate for MySQL 的精確建立使用 MySQL Shell 傾印和傾印載入公用程式,而且僅支援 MySQL 來源和 MySQL 目標資料庫。

此方法需要安裝 MySQL Shell。安裝步驟可從以下連結取得:

<https://dev.mysql.com/doc/mysql-shell/ 8.0/en/mysql-shell-install.html>

如需 MySQL Shell 傾印與傾印載入公用程式的詳細資訊與限制,請參閱下列連結:

https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html

https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-load-dump.html

根據您的需求,您將使用 MySQL Shell 傾印公用程式來匯出 MySQL 執行處理、綱要或表格。接著,您將使用 MySQL 傾印載入公用程式將物件載入目標資料庫,之後再設定 GoldenGate Extract 和 Replicat 將持續變更資料從來源複製到目標資料庫。

MySQL Shell 傾印公用程式會建立多個匯出檔案,其中一個是 @.json 檔案。將 Extract 新增至來源資料庫時,需要使用此檔案來決定其位置。

以下是一個使用來源執行處理之綱要傾印的精確建立方法範例,然後載入目標執行處理,接著是 Oracle GoldenGate 的組態來進行變更資料複製:1。連線至 MySQL Shell。如需 MySQL Shell 支援之連線選項的詳細資訊,請參閱此連結:https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-connections.html

<pre class="copy"><code>mysqlsh -mysqlx -u *username* -h *hostname* -P *port*</code></pre>
  1. 連線至 MySQL Shell 之後,請確定您處於 JavaScript 模式。您應該會看到 JS > 提示。如果處於 SQL 模式,請使用 \js 交換器切換至 JavaScript 模式:

    MySQL sourcehost:33060+ ssl SQL > \js
  2. 檢查全域變數 local_infile 是否設為 ON。

    MySQL sourcehost:33060+ ssl JS > \sql SHOW GLOBAL VARIABLES LIKE
        'local_infile';

    如果 local_infile 變數設定為 OFF,請使用下列指令開啟它:

    MySQL sourcehost:33060+ ssl JS > \sql SET GLOBAL local_infile = ON;
  3. 接著,使用下列其中一個函數來匯出要匯出的執行處理、綱要或表格。

    util.dumpInstance(outputUrl[, options])
    util.dumpSchemas(schemas, outputUrl[,  options])
    util.dumpTables(schema, tables, outputUrl[, options])

    在此範例中,我們將傾印 HR 綱要至 ~/dumps/hr-schema-src 資料夾:

    MySQL sourcehost:33060+ ssl JS >util.dumpSchemas(["hr"], "~/dumps/hr-schema-src")
  4. 匯出完成後,請使用 util.loadDump 公用程式將綱要匯入目標執行處理。注意:如果您的目標執行處理位於與來源不同的系統上,則必須將匯出的檔案複製到目標系統。

<pre class="copy"><code>MySQL targethost:33060+ ssl JS &gt;util.loadDump(&quot;~/dumps/hr-schema-tgt&quot;, {schema: &quot;tgt-hr&quot;})</code></pre>
  1. 資料載入公用程式完成時,請開啟來源傾印資料夾中的 @.json 檔案。此檔案包含傾印中包含的最後確認交易,且必須使用該交易值來設定變更資料 Extract。以下是 @.json 檔案中的交易資訊範例:

    "binlogFile": "binlog.000005",
    "binlogPosition": 1289,
          "gtidExecuted": "1174b383-3441-11e8-b90a-c80aa9429920:1-9,\n1174b383-3441-11e8-b90a-c80aa9429921:1-9"
  2. 根據您的資料庫組態,使用 gtidExecuted 值或 binlogFile 和 binlogPosition 值將 Extract 新增至來源資料庫。

    1. 如果來源資料庫的 gtid_mode 設定為 ON,請使用 @.json 檔案中的 gtidExecuted 值來新增 Extract。

      使用 GTIDSET 位置的範例 (根據 gtidExecuted 值):

      ADD EXTRACT extsrc, TRANLOG GTIDSET "1174b383-3441-11e8-b90a-c80aa9429920:1-9,\n1174b383-3441-11e8-b90a-c80aa9429921:1-9"
    2. 如果來源資料庫的 gtid_mode 設為 OFF,請在新增 Extract 時,使用 @.json 檔案的 binlogFile 和 binlogPosition 值。

      使用 LOGNUM 和 LOGPOS 位置的範例 (根據 binlogFile 和 binlogPosition 值):

      ADD EXTRACT extsrc, TRANLOG, LOGNUM 5 LOGPOS 1289
  3. 最後,新增下列處理作業來完成 Oracle GoldenGate 組態:

    1. 擷取的對應歷程檔

    2. 分佈路徑 (如果需要)

    3. 要傳遞至目標資料庫的 Replicat

  4. 啟動 Oracle GoldenGate 處理作業並監督 Extract 和 Replicat,以確認它們是否正確執行,並且將延遲縮短至近乎即時。