使用 MySQL Shell 实用程序和 Oracle GoldenGate 为 MySQL 到 MySQL 进行精确实例化

精确的实例化方法允许在源数据库保持联机状态以进行应用程序更新时,将数据从源数据库初始加载到目标数据库。此方法可确保更改数据捕获和传送进程的精确定位,而无需在目标数据库中具有重复数据,也无需在复制中使用 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 提取和复制以将持续更改数据从源数据库复制到目标数据库。

MySQL Shell 转储实用程序可创建多个导出文件,其中一个是 @.json 文件。将提取添加到源数据库时,需要使用此文件来确定提取的位置。

下面是使用源实例中的方案转储的精确实例化方法示例,然后加载到目标实例,然后配置 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 文件。此文件包含转储中包含的最后一个已提交事务处理,需要使用该事务处理值配置更改数据提取。下面是 @.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 值向源数据库添加提取。

    1. 如果源数据库的 gtid_mode 配置为 ON,请使用 @.json 文件中的 gtidExecuted 值添加提取。

      使用 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,请在添加提取时使用 @.json 文件的 binlogFile 和 binlogPosition 值。

      使用 LOGNUM 和 LOGPOS 定位的示例,基于 binlogFile 和 binlogPosition 值:

      ADD EXTRACT extsrc, TRANLOG, LOGNUM 5 LOGPOS 1289
  3. 最后,添加以下进程来完成 Oracle GoldenGate 配置:

    1. 提取的相应线索

    2. 分配路径(如果需要)

    3. 要传送到目标数据库的复制

  4. 启动 Oracle GoldenGate 进程并监视提取和复制,以确认它们已正确运行,并且该延迟已减少到接近实时。