使用 Database Migration Service 进行快速启动迁移

本页面介绍了如何执行同构 PostgreSQL 迁移到 Cloud SQL for PostgreSQL 的快速启动迁移。

概览

快速启动迁移是一种轻量级的持续迁移流程,适用于同构 PostgreSQL 场景。借助快速启动迁移功能,Database Migration Service 可以自动设置迁移数据库所需的一切:网络组件(网络连接、子网、专用连接配置)、连接配置文件和迁移作业。

借助快速启动迁移,您可以将数据迁移到现有的 Cloud SQL for PostgreSQL 实例,也可以在配置迁移时创建一个新实例。 快速启动迁移最适合以下情况:

  • 基本迁移,您无需精确控制数据转储并行设置。
  • 将数据库从一个 Google Cloud 项目迁移到另一个项目。 配置快速入门迁移时,您可以在与源项目不同的项目中创建目标实例,并设置 Database Migration Service 以在另一个项目的虚拟私有云 (VPC) 网络中创建网络连接和子网。
  • 从 Google Cloud虚拟私有云 (VPC) 网络中具有专用 IP 地址的来源迁移,例如 Compute Engine 上的自管理数据库,或已启用专用网络的 Cloud SQL for PostgreSQL 实例。

    托管在 Google Cloud 之外的来源可能需要额外的网络组件(例如 Cloud VPN 连接),以便可以通过 VPC 网络中的专用 IP 地址访问这些来源。

  • 唯一受支持的数据库连接方法是使用 Private Service Connect 接口和 Database Migration Service 专用连接配置。您的源数据库需要在 VPC 网络中分配有专用 IP。快速启动迁移不支持其他同构源连接方法(例如公共 IP 许可名单、反向 SSH 隧道或 VPC 对等互连)。

如需详细了解快速启动迁移,请参阅 Database Migration Service 文档中的快速启动迁移

准备工作

  1. 验证快速启动迁移是否能完全支持您的方案。请参阅 Database Migration Service 文档中的快速启动迁移限制
  2. 登录您的 Google 账号。

    如果您还没有 Google 账号,请注册新账号

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. Verify that billing is enabled for your Google Cloud project.

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 启用 Database Migration Service API、Compute Engine API、Network Connectivity Center API 和 Cloud SQL Admin API。

    启用 API

所需的角色

如需获得使用 Database Migration Service 将数据快速迁移到 Cloud SQL for PostgreSQL 所需的权限,请让您的管理员为相关项目中参与迁移的账号授予所需的 Identity and Access Management (IAM) 角色。如需详细了解如何授予角色,请参阅 IAM 文档中的管理访问权限

源项目中的角色和权限

数据库所在的 Google Cloud 项目中的特定账号授予以下角色:

  • 对于执行迁移的用户账号: Compute Network Admin (roles/compute.networkAdmin)
  • 对于目标项目的 Database Migration Service 服务账号: Compute Network Viewer(roles/compute.networkViewer)

    Database Migration Service 服务账号是在您启用 Database Migration Service API 时创建的。与此账号关联的电子邮件地址是自动生成的,无法更改。此电子邮件地址采用以下格式:

    service-DESTINATION_PROJECT_NUMBER@gcp-sa-datamigration.iam.gserviceaccount.com

这些预定义角色包含在通过 Database Migration Service 进行快速启动迁移时,在数据库项目中设置连接所需的权限。如需查看所需的确切权限,请展开所需权限(来源)部分:

所需权限(来源)

如需使用 Database Migration Service 执行同构快速启动迁移,您需要拥有以下权限:

对于执行迁移的用户账号:

  • compute.networks.*
  • compute.subnetworks.*
  • compute.networkAttachments.*

对于目标项目的 Database Migration Service 服务账号:compute.networkAttachments.get

目标项目中的角色和权限

向在 Google Cloud 项目(即目标数据库所在的项目)中执行迁移的用户账号授予以下角色:

这些预定义角色包含在目标数据库项目中设置所需迁移组件所需的权限,以便使用 Database Migration Service 进行快速启动迁移。如需查看所需的确切权限,请展开所需权限(目标位置)部分:

所需权限(目标)

如需使用 Database Migration Service 执行同构快速启动迁移,您需要拥有以下权限:

  • datamigration.*
  • cloudsql.instances.create
  • cloudsql.instances.delete
  • cloudsql.instances.get
  • cloudsql.instances.list
  • cloudsql.instances.update
  • cloudsql.instances.connect
  • cloudsql.instances.executeSql
  • cloudsql.instances.export
  • cloudsql.instances.import
  • cloudsql.instances.login
  • cloudsql.operations.get
  • cloudsql.users.get
  • cloudsql.users.list
  • cloudsql.users.create
  • cloudsql.users.update
  • cloudsql.users.delete

配置源数据库

如需配置源 PostgreSQL 数据库,请执行以下操作:

  1. 在实例中创建专用的迁移用户账号。
    • 对于 Cloud SQL for PostgreSQL 源,请参阅 Cloud SQL for PostgreSQL 文档中的创建用户
    • 如需了解其他来源,请参阅数据库提供方文档或 PostgreSQL 文档中的 创建和管理用户
  2. 向专用迁移用户账号分配必要的权限。 针对要迁移的每个数据库运行以下命令:
    -- Grant the REPLICATION attribute
    ALTER ROLE MIGRATION_USER REPLICATION;
    
    -- Grant database-level permissions.
    -- Repeat for each database you want to migrate.
    GRANT CONNECT, CREATE ON DATABASE DATABASE_NAME TO MIGRATION_USER;
    
    -- Grant schema-level usage.
    -- Repeat for each schema in each database you want to migrate.
    GRANT USAGE ON SCHEMA SCHEMA_NAME TO MIGRATION_USER;

    替换以下内容:

    • MIGRATION_USER 替换为迁移用户账号的名称。
    • DATABASE_NAME 替换为要迁移的数据库的名称。
    • SCHEMA_NAME 替换为要迁移的数据库中的架构名称。
  3. 迁移用户账号需要对您迁移的表拥有所有权访问权限。如需授予此级别的访问权限,请执行以下操作之一:
    • SUPERUSER PostgreSQL 角色分配给迁移账号。
    • 将迁移用户账号添加到拥有相应表的用户组。运行以下命令:
      -- Grant table ownership.
      GRANT TABLE_OWNER_GROUP_NAME TO MIGRATION_USER;

      替换以下内容:

      • TABLE_OWNER_GROUP_NAME,其中包含您要迁移的每个表所属的用户组的名称。
      • MIGRATION_USER 替换为迁移用户账号的名称。
  4. 对于没有主键的表:在变更数据捕获 (CDC) 阶段,Database Migration Service 不会复制没有主键的表的 UPDATEDELETE 操作。如果您想在复制中包含此类操作,请使用 REPLICA IDENTITY 修改没有主键的表:
    ALTER TABLE TABLE_NAME REPLICA IDENTITY FULL;
    ALTER TABLE TABLE_NAME REPLICA IDENTITY USING INDEX INDEX_NAME;

    替换以下内容:

    • TABLE_NAME 是没有主键的表的名称。
    • INDEX_NAME 是可以跟踪没有主键的表中的行的唯一索引。
  5. 使用数据库标志配置复制设置。

    自行管理的来源

    保存对数据库标志的更改需要完全重启数据库。 以下示例使用 SQL 查询来更改标志值。 如果您无法直接运行 SQL 查询,请参阅提供商文档,了解有关更改这些标志的步骤。

    1. wal_level 参数设置为 logical。运行以下命令:
      ALTER SYSTEM SET wal_level = 'logical';
    2. wal_sender_timeout 参数设置为 0。 此值可停用用于终止非活跃复制连接的超时机制。运行以下命令:
      ALTER SYSTEM SET wal_sender_timeout = 0;
          
    3. 使用 max_replication_slots 参数配置复制槽数上限。此参数必须设置为至少等于每个迁移作业中要迁移的数据库数量,并预留一部分用于表同步。

      例如,如果您要迁移 5 个数据库,并且为源实例创建了 2 个迁移作业,那么除了您已经使用的复制槽数量之外,复制槽的数量必须至少为 5 * 2 = 10

      如需设置此参数,请运行以下命令:

      ALTER SYSTEM SET max_replication_slots = NUMBER_OF_SLOTS;
          
      其中,NUMBER_OF_SLOTS 表示复制槽的最大数量。
    4. max_wal_senders 参数配置为至少与 max_replication_slots 相同的值,再加上实例中已使用的发送方数量。

      例如,如果 max_replication_slots 参数设置为 10,并且您已经使用 2 个发送器,则同时运行的 WAL 发送器进程的数量将为 10 + 2 = 12

      如需设置此参数,请运行以下命令:

      ALTER SYSTEM SET max_wal_senders = NUMBER_OF_SENDERS;
          
      其中,NUMBER_OF_SENDERS 表示同时运行的 WAL 发送器进程数。
    5. max_worker_processes 设置为至少是您要迁移的数据库数量加上实例中已使用的 max_worker_processes 数量。如需设置此参数,请运行以下命令:
      ALTER SYSTEM SET max_worker_processes = NUMBER_OF_PROCESSES;
          
      其中,NUMBER_OF_PROCESSES 表示将迁移的数据库数量。

    Cloud SQL for PostgreSQL 来源

    对于 Cloud SQL 源,您可以在 Google Cloud 控制台中配置数据库标志。 修改数据库标志后,您必须重启实例,设置才会生效。如需详细了解如何在 Cloud SQL 中设置数据库标志,请参阅 Cloud SQL 文档中的配置数据库标志

    1. cloudsql.logical_decoding 标志设置为 on
    2. wal_sender_timeout 参数设置为 0。 此值可停用用于终止非活跃复制连接的超时机制。
    3. 使用 max_replication_slots 参数配置复制槽数上限。此参数必须设置为至少等于每个迁移作业中要迁移的数据库数量,并预留一部分用于表同步。

      例如,如果您要迁移 5 个数据库,并且为源实例创建了 2 个迁移作业,那么除了您已经使用的复制槽数量之外,复制槽的数量必须至少为 5 * 2 = 10

    4. max_wal_senders 参数配置为至少与 max_replication_slots 相同的值,再加上实例中已使用的发送方数量。

      例如,如果 max_replication_slots 参数设置为 10,并且您已经使用 2 个发送器,则同时运行的 WAL 发送器进程的数量将为 10 + 2 = 12

    5. max_worker_processes 设置为至少等于您要迁移的数据库数量加上实例中已使用的 max_worker_processes 数量。

创建并运行快速启动迁移

使用快速启动迁移时,您可以创建新的 Cloud SQL 实例并将数据库迁移到该实例,也可以将数据库迁移到现有实例。

新实例的快速启动迁移

如需创建新的 Cloud SQL for PostgreSQL 实例并立即将数据库迁移到该实例,请按以下步骤操作:

  1. 转到实例页面。

    前往“实例”页面

  2. 依次点击创建实例 > 从现有数据库创建
  3. 迁移现有数据库窗口中,选择快速启动 PostgreSQL 迁移,然后点击继续

    系统会打开 Database Migration Service 快速启动迁移表单。

  4. 配置迁移部分中,执行以下操作:
    1. 目标区域菜单中,选择目标 Cloud SQL for PostgreSQL 实例的区域。
    2. 迁移前缀框中,输入一个便于用户理解的字符串,该字符串将添加到为快速启动迁移创建的所有迁移实体的名称中:连接配置文件、专用连接配置、网络连接及其子网,以及迁移作业。
    3. 配置类型菜单中,选择以下选项之一:
      1. 现有连接配置:如果您已拥有网络连接和使用 Private Service Connect 接口方法的专用连接配置,请选择此选项。 如果您之前使用过快速启动迁移,并希望重复使用相同的网络资源,则最好使用此选项。
      2. 新的连接配置:选择此选项可在源数据库 VPC 网络中创建新的网络连接和网络连接子网。 专用连接配置将在目标实例所在的同一项目中创建。
    4. 点击继续
  5. 连接来源部分中,执行以下操作:
    1. 输入源数据库的主机名或私有 IP 地址。源数据库地址必须可从源 VPC 网络访问。
    2. 输入用于访问主机的端口。默认的 PostgreSQL 端口为 5432
    3. 在源数据库中,输入专用迁移账号的用户名和密码。
    4. 加密类型菜单中,选择以下选项之一:
      • :如果源数据库不需要 SSL/TLS 加密连接。
      • 必需:如果源数据库需要 SSL/TLS 加密的连接。此选项不需要进行任何证书验证。
    5. 要迁移的数据库菜单中,点击自定义。 使用侧边栏仅选择要迁移到 Cloud SQL for PostgreSQL 的数据库。
    6. 点击继续
  6. 配置目的地部分中,执行以下操作:
    1. 目标实例类型菜单中,选择新实例

      Database Migration Service 会为新实例使用默认的 Cloud SQL for PostgreSQL 配置。点击自定义以调整实例功能,例如机器类型、可用区可用性或数据保护设置。 如需详细了解实例配置,请参阅创建实例

    2. 密码字段中,输入默认 postgresql 管理员用户的密码。Database Migration Service 会以该用户身份连接,以迁移您的数据。
  7. 点击开始迁移

    Database Migration Service 现在会创建迁移作业并开始迁移流程。您可以在 Database Migration Service 迁移作业详情中监控迁移进度。如需了解详情,请参阅 Database Migration Service 文档中的管理迁移作业

现有实例的快速启动迁移

如需将数据库迁移到现有 Cloud SQL 实例,请按以下步骤操作:

  1. 转到实例页面。

    前往“实例”页面

  2. 选择要将数据库迁移到的 Cloud SQL 实例。
  3. 在实例详情页面上,点击迁移数据库

    系统会打开 Database Migration Service 快速启动迁移表单。

  4. 配置迁移部分中,执行以下操作:
    1. 目标区域菜单中,选择目标 Cloud SQL for PostgreSQL 实例的区域。
    2. 迁移前缀框中,输入一个便于用户理解的字符串,该字符串将添加到为快速启动迁移创建的所有迁移实体的名称中:连接配置文件、专用连接配置、网络连接及其子网,以及迁移作业。
    3. 配置类型菜单中,选择以下选项之一:
      1. 现有连接配置:如果您已拥有网络连接和专用连接配置,并且该配置在源数据库 VPC 网络中使用 Private Service Connect 接口,请选择此选项。如果您之前使用过快速启动迁移,并且想要重复使用相同的网络资源,最好使用此选项。
      2. 新的连接配置:选择此选项可在源数据库 VPC 网络中创建新的网络连接、网络连接子网和专用连接配置。
    4. 点击继续
  5. 连接来源部分中,执行以下操作:
    1. 输入源数据库的主机名或私有 IP 地址。源数据库地址必须可从源 VPC 网络访问。
    2. 输入用于访问主机的端口。默认的 PostgreSQL 端口为 5432
    3. 在源数据库中,输入专用迁移账号的用户名和密码。
    4. 加密类型菜单中,选择以下选项之一:
      • :如果源数据库不需要 SSL/TLS 加密连接。
      • 必需:如果源数据库需要 SSL/TLS 加密的连接。此选项不需要进行任何证书验证。
    5. 要迁移的数据库菜单中,点击自定义。 使用侧边栏仅选择要迁移到 Cloud SQL for PostgreSQL 的数据库。
  6. 点击开始迁移

    Database Migration Service 现在会创建迁移作业并开始迁移流程。您可以在 Database Migration Service 迁移作业详情中监控迁移进度。如需了解详情,请参阅 Database Migration Service 文档中的管理迁移作业

完成迁移

当您决定将应用切换到新的 Cloud SQL 实例时,请按照以下步骤完成迁移:

  1. 停止对源数据库的所有写入操作。您可以将它们切换到只读模式,以保留操作功能。
  2. 提升迁移作业
  3. 可选:验证迁移数据的完整性。

后续步骤