注:

使用复制将 MySQL 的 Google Cloud Platform CloudSQL 迁移到 Oracle Cloud Infrastructure MySQL Heatwave

简介

本教程介绍了如何对 MySQL 的 Google Cloud Platform CloudSQL 执行实时迁移到 Oracle Cloud Infrastructure (OCI) MySQL Heatwave Database Service。在该文章的帮助下,我们将能够了解如何在两个不同的云提供商之间使用 MySQL 复制,这将成为成功迁移到 OCI Heatwave 的文档。在本教程中,我们将使用以下产品:

  1. GCP CloudSQL(适用于 MySQL)
  2. MySQL 用于联机事务处理的热浪 (OLTP)
  3. OCI 对象存储
  4. 作为堡垒的 OCI 计算
  5. MySQL Shell

目标

将 MySQL 的 Google Cloud Platform CloudSQL 连接到 MySQL Heatwave 数据库服务,然后开始向 OCI 数据库系统进行入站复制。我们将概要介绍 Google Cloud Platform 与 MySQL 之间的连接,但 Google Cloud Platform CloudSQL 和 MySQL Heatwave 之间的详细网络可能性可以在官方文档中引用。

体系结构

下面是解决方案的高级架构示例。

主图像

点线表示数据流,即从 GCP 的 MySQL 云 SQL 到初始数据集的对象存储。数据在对象存储中可用后,我们将进一步使用 OCI MySQL Heatwave 数据库系统提供的复制通道。

先决条件

在本教程中,我们将使用入站复制。在入站复制的帮助下,我们使用在 MySQL Heatwave 数据库服务中配置的复制通道,并且可以将事务处理从一个位置发送到另一个位置。我们的来源可能有所不同,例如本地部署、Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform 等。在本教程中,我们重点介绍适用于 MySQL 的 Google Cloud Platform Cloud SQL,我们的目标是 MySQL Heatwave Database Service。

您可以在此处阅读有关 MySQL 入站复制概述的更多信息。保持本教程简单,因为它还提供有关源配置、创建复制用户、创建复制通道及其限制的详细说明。

我们将迁移的整个流程划分为以下高级步骤。

  1. 访问现有 Google 云平台的 MySQL 云 SQL
  2. 为 MySQL 准备 Google Cloud Platform 的 Cloud SQL
  3. 使用 MySQL Shell 在 OCI 上堡
  4. Google Cloud Platform Cloud SQL for MySQL 与 OCI Heatwave 数据库系统之间的网络注意事项
  5. 在 OCI 上配置对象存储桶
  6. 将数据导出到 OCI 对象存储
  7. 在 OCI 上创建新数据库系统
  8. 在 OCI 上创建复制通道

任务 1:访问 MySQL 的现有 Google Cloud Platform Cloud SQL

我们正在使用 Google Cloud Platform 的 Cloud SQL 上托管的示例数据库 MySQL 来实现迁移。现有 MySQL 实例托管在 Google Cloud Platform 允许的公共子网上,因此我们将其用作源数据库。假定 MySQL 的 Google Cloud Platform CloudSQL 正在运行 MySQL 版本 8.0 的企业版本。

图像 1

图像 2

了解公共 IP 后,我们可以将 IP 地址列入白名单,并轻松地与 MySQL 客户端连接。还可以使用 MySQL shell 或 gcloud 实用程序连接到数据库。通过在适用于 MySQL 的 Google Cloud Platform Cloud SQL 的网络部分中添加并单击保存更改,我们可以对公共 IP 执行白名单。

图像 3

注意:此处也添加了其他 IP,我们将在后面的部分中介绍这些 IP。

一旦我们能够连接,我们就可以在 Google Cloud Platform CloudSQL 中查询 MySQL 实例的现有数据库。为了我们的迁移目的,我们将只关注示例数据库 Sakila。

图像 4

任务 2:为 MySQL 准备 Google Cloud Platform Cloud SQL

在使用入站复制时,需要在源服务器上执行两个步骤。我们必须创建一个将用于复制的用户,还需要确保在源服务器上启用 GTID。使用 GTID(全局事务处理标识符),可以标识和跟踪每个事务处理,就像在源源服务器上提交一样。然后,将同一事务处理应用于目标副本。

  1. 创建复制用户并使用以下命令分配角色。

    mysql> create user repl@'%' IDENTIFIED BY 'yourreplpassword' REQUIRE SSL;
    mysql> grant replication slave on *.* to repl@'%';
    mysql> select user from mysql.user;;
    
  2. 确保已启用 GTID。默认情况下启用 GTID,但如果未启用 GTID,则可以启用它们。

    mysql>show global variables like 'gtid%';

    图像 5

任务 3:使用 MySQL Shell 在 OCI 上部署堡垒

对于 Oracle Cloud Infrastructure,MySQL 数据库系统端点无法直接从 Internet 访问。由于安全性得到了增强,因此可以在配置的 VCN 下的专用端点帮助下部署该服务。因此,我们需要使用计算实例、VPN、堡垒或网络负载平衡器连接 OCI MySQL Heatwave 数据库服务以访问专用端点。

您可以选择上述任何选项。在本例中,我们将使用计算实例作为 MySQL Heatwave 数据库服务的堡垒。如何使用其他选项,请参见此处

在使用计算实例时,我们需要在 VCN 的公共子网中部署计算。该 VCN 的专用子网将托管 MySQL 热浪数据库服务。配置计算实例时,您无需担心该计算的资源配置,因为该配置仅用于安装 MySQL shell 或 MySQL 客户端以及连接到适用于 MySQL 的 Google Cloud Platform Cloud SQL。

如何创建计算实例,请参见此处

如下图所示,我们在 VCN 的公共子网中创建了计算实例,托管 MySQL 热浪数据库服务。此堡垒服务器将充当 OCI 与 Google Cloud Platform 之间的中间服务器,我们可以在其中访问 MySQL 实例。要连接到 MySQL 数据库实例,可以使用 MySQL shell 或 MySQL 客户机。

图像 6

让我们运行以下命令来安装 Mysql shell。

`sudo yum install mysql-shell`

您还可以参阅文档了解更多信息。

任务 4:验证 MySQL 和 OCI MySQL Heatwave 数据库服务的 Cloud SQL 之间的网络注意事项

此处的一个重要原因是确保源服务器与目标服务器之间的通信成功建立。

在 Google Cloud Platform 控制台上,我们需要确保堡垒实例的公共 IP 也列入白名单。使用上述用于将数据库与 MySQL 客户端连接的流程可以实现此目的。

在 OCI 控制台上,需要在堡垒计算实例之间建立通信,堡垒计算实例托管在 MySQLVCN 的公共子网上,而 MySQL 热浪数据库服务托管在同一 VCN 中的专用子网上。我们必须流量允许,并且可以在专用子网中打开入站规则并允许连接。

任务 5:在 OCI 上配置对象存储桶

我们需要在 OCI 上配置对象存储,以便从适用于 MySQL 的 Google Cloud Platform CloudSQL 存储初始数据转储。这将是一次性活动,此数据将用于在 MySQL Heatwave 数据库服务上创建数据库。

有关在 OCI 上创建存储桶的信息,请参阅创建存储桶

图像 7

创建以上存储桶后,我们需要在对象存储桶和堡垒实例之间建立链接。为此,我们将使用 MySQL Shell 将使用的 oci 配置文件。

:在创建 API 密钥期间,必须使用在 OCI 控制台上生成的私有密钥的位置更新 key_file 参数。

任务 6:将数据导出到 OCI 对象存储

我们将使用堡垒服务器上的 MySQL Shell 实用程序从适用于 MySQL 的 Google Cloud Platform 的 Cloud SQL 导出数据。MySQL shell 实用程序是一个非常强大的工具,有助于一次导出整个实例并提供各种选项。

在本练习中,我们将从 Google Cloud Platform 的 CloudSQL for Mysql 数据库将方案导出到 OCI 对象存储。

我们先从堡垒计算连接到 MySQL 实例。

图像 12

util.dumpSchemas(["sakila"], "", { osBucketName: "MysqlBucket", osNamespace: "orasenatdpltintegration01", ocimds: true, ociParManifest: true, threads: 8, compatibility: ["force_innodb", "skip_invalid_accounts", "strip_definers", "strip_restricted_grants",  "strip_tablespaces"], dryRun: "true"})

其余选项可根据您的需求使用,有关更多信息,请参见此处

图像 13

模拟运行完成后,检查输出并解决问题。如果没有任何兼容性问题,请在不使用 dryRun 的情况下运行,如下所示:-

图像 14

它提供有关导出活动的详细信息,还提供持续时间。由于是数据库样例,大约有 45k 条记录,因此它很快完成。

一旦该过程成功,您的数据将存储在作为对象存储一部分的存储桶中。

图像 15

任务 7:在 OCI 上创建新数据库系统

有关如何配置 MySQL 数据库系统的更多详细信息,请参阅创建数据库系统

唯一需要注意的是,由于对象存储中已有数据,因此,为了配置数据库系统,让我们使用这些数据。您也可以稍后加载数据,但此选项可节省大量时间。要使用此选项,需要创建 PAR 请求。

图像 16

图像 17

确保已保存此处生成的 URL,因为这将按如下方式使用。

图像 18

指定 PAR URL 后,会自动使用 Sakila 数据库创建 MySQL 数据库系统。

要进行验证,请运行以下命令。

图像 19

这样,目标数据库系统中现在有了源数据库。现在,我们将在源和目标之间创建复制。

任务 8:在 OCI 上创建复制通道

复制通道用于将源数据库系统连接到目标数据库系统。在这些渠道的帮助下复制所有事务处理。这些渠道的创建相当简单,因为我们只需要提供关于来源和目标的几个细节。始终建议使用加密连接,这就是为什么当我们创建用户时,我们在前面的步骤中指定了关键字 SSL。

由于复制源可能不同,我们还允许对不同的公共云提供商使用不同的通道过滤器。有关详细信息,请单击此处

下图显示了在 OCI 上创建复制通道时显示的不同选项。我们需要提供源主机名或公共 IP 地址以及端口号。我们将在之前创建的 Repl 用户的帮助下进行验证。

图像 20

图像 21

我们还指定我们已为复制创建的目标数据库系统以及复制过滤器,我们提供了选项,您可以根据情况从下拉菜单中选择复制过滤器。

如果在导出后源系统上没有进一步的负载,复制通道应激活并完成。但是,由于 GTID 不匹配并且应采取必要的操作,可能会导致负载不一致。复制通道有不同的阶段,有关其详细信息,请参见此处

有关在入站复制配置期间可能遇到的最常见错误消息的详细信息,请参见故障排除指南

在 Google Cloud Platform 源上插入虚拟数据,如下图所示。

图像 21

在 MySQL Heatwave 数据库服务上查询示例数据库。

图像 22

在控制台中,我们可以看到源和目标之间存在零滞后,事务处理正在被复制和提交。因此,我们可以使用复制通道来实现灾难恢复和迁移。基于适当的规划和应用停机时间,我们可以执行切换活动,并使用 MySQL Heatwave 数据库服务,该服务是 OLTP 事务处理和分析负载的一站式解决方案。

后续步骤

在本教程中,我们看到 OCI MySQL Heatwave 数据库服务提供了一种相当简单的入站复制机制。它支持多个源,甚至提供了与这些源相关的复制通道过滤器。入站复制可用于将数据集引入 Oracle Cloud 并使用其热浪产品。不仅如此,还引入了 MySQL Heatwave Lakehouse ,您可以在其中以 TB 为单位以多种格式加载大量数据。您可以找到有关 MySQL Heatwave 数据库服务的详细信息,以及它如何通过提供内存中查询加速器最大限度地提高查询性能。

确认

更多学习资源

探索 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 频道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心