实验设置说明和要求
保护您的账号和进度。请务必在无痕浏览器窗口中,使用实验凭证运行此实验。

在运行 Database Migration Service 作业时迁移 MySQL 用户数据

实验 55 分钟 universal_currency_alt 1 个点数 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP861

Google Cloud 自学实验的徽标

概览

Database Migration Service 可高效地将 MySQL 数据库对象(包括架构、数据和元数据)从源实例迁移到目标实例。迁移作业在运行时,会将所有数据库和架构中的所有表一并迁移,但以下系统数据库除外:sysmysqlperformance_schemainformation_schema

用户和权限相关信息存储在 MySQL 系统数据库中。由于 Database Migration Service 作业不会迁移这些系统数据库,因此您需要先创建目标 Cloud SQL 实例,然后在其中管理用户和权限。如需详细了解迁移保真度相关信息,请参阅迁移保真度指南

如果对象的 DEFINER 子句中指定的用户在目标实例中不存在,则迁移后可能无法调用该对象。如需了解详情,请参阅“创建并运行包含 DEFINER 子句元数据的 MySQL 迁移作业”指南

为避免迁移后在目标实例中调用对象时出现错误,请在运行迁移作业之前完成以下两项操作中的一项:

  • 确保用户存在:在 MySQL 目标实例上创建必要用户。这样可确保与 DEFINER 子句相关联的所有用户都存在于目标实例中。
  • 更新安全权限:在 MySQL 源实例上,将 DEFINER 子句更改为 INVOKER。这样可将目标实例中的数据访问安全权限设置为运行查询的用户权限,而非定义该对象的用户权限。

满足这些前提条件后,您即可创建并保存 Database Migration Service 作业,然后可启动该已保存的作业。成功完成迁移后,最后一步即是验证 Cloud SQL for MySQL 实例上的用户元数据。

您将执行的操作

在本实验中,您将学习如何在运行 Database Migration Service 作业时迁移 MySQL 用户数据:

  • 识别源实例上现有的 MySQL 用户。
  • 在 MySQL 源实例上将 DEFINER 子句更新为 INVOKER
  • 创建并保存 Database Migration Service 作业,但不启动该作业。
  • 在 Cloud SQL 目标实例上创建用户。
  • 启动之前创建的 Database Migration Service 作业。
  • 检查 Cloud SQL 目标实例中的用户元数据。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:

    • “打开 Google Cloud 控制台”按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在“实验详细信息”窗格中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在“实验详细信息”窗格中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

验证 Database Migration API 已经启用

  1. 在 Google Cloud 控制台标题栏的搜索字段中输入 Database Migration API,然后在搜索结果中点击 Database Migration API

  2. 如需要,请点击启用以启用该 API。

任务 1. 识别源实例上现有的 MySQL 用户

与其他 Cloud 资源类似,目标 Cloud SQL 实例的访问和许可权限是使用 Identity and Access Management (IAM) 在项目级控制的。如需了解详情,请参阅 Cloud SQL 的 IAM 指南

在本任务中,您将找出通过数据库访问权限控制管理的数据库用户(例如管理员和超级用户)。这些用户与通过 IAM 管理的用户不同,在发放更宽松的 IAM 访问权限之前,这些用户可能需要先行访问目标 Cloud SQL 实例,以测试迁移作业的结果。如需了解详情,请参阅“MySQL 用户简介”指南

连接到 MySQL 源实例

  1. 在 Google Cloud 控制台标题栏的导航菜单 (“导航菜单”图标) 中,依次点击 Compute Engine > 虚拟机实例

  2. 找到 dms-mysql-training-vm 实例所在的行。

  3. 对于连接,点击 SSH 以打开终端窗口。

  4. 如果出现提示,请点击授权

您可以忽略 SSH 窗口中显示的有关升级的任何警告。

  1. 在终端窗口中,运行以下命令连接到 MySQL 交互式控制台:
mysql -u admin -p
  1. 当系统提示输入密码时,请输入以下密码:
changeme!

识别现有的 MySQL 用户

  1. 运行以下查询,识别现有的 MySQL 用户:
select host, user, authentication_string from mysql.user order by user;

请注意名为 debian-sys-maint、mysql.session 和 mysql.sys 的系统用户。这些用户无需重新创建,因为在创建目标实例时,MySQL 会创建这些用户。

  1. 运行修改后的查询,以排除这些系统用户:
select host, user, authentication_string from mysql.user where user not like '%mysql%' and user not like '%debian%' order by user;
  1. 查看需要在 Cloud SQL 目标实例中重新创建的用户清单:
host user
localhost admin
% admin
localhost bsmith
localhost dwilliams
localhost mhill
localhost root
% root

在后续任务中,您将在运行 Database Migration Service 作业时创建根用户。您还将在迁移作业创建 Cloud SQL 目标实例后创建其他用户。

  1. 请勿关闭终端窗口,以便在下一个任务中使用。

任务 2. 在 MySQL 源实例上将 DEFINER 更新为 INVOKER

在上一个任务中,您识别出了源实例上现有的 MySQL 用户。在本任务中,您将找出并更新那些有 DEFINER 条目关联到根用户或其他目标实例中尚不存在的用户的数据库对象。

如果源实例中的用户未在目标实例中创建,则必须将所有关联的 DEFINER 条目更改为 INVOKER。具体来说,根用户的所有 DEFINER 条目都应通过其他用户(例如管理员)更新为 INVOKER

这些操作可防止迁移后在目标实例上调用对象时发生错误;如需查看其他文档,请参阅“创建并运行包含 DEFINER 子句元数据的 MySQL 迁移作业”指南

找出包含 DEFINER 条目的对象

如需获取有关 MySQL 实例中 DEFINER 的信息,您可以查询 INFORMATION_SCHEMA 表,以找出需要在迁移前检查的 DEFINER 条目(例如,由于未与 mysql 等系统数据库相关联,所以将被迁移到目标实例的 DEFINER 条目)。

  1. 运行以下查询,找出 DEFINER 条目:
select table_schema, table_name from information_schema.columns where column_name = 'DEFINER' and table_schema != 'mysql';

结果表明,您需要检查事件、例程、触发器和视图中是否存在 DEFINER 条目。

请注意,其中一些 DEFINER 条目可能与系统用户相关联,无需对其采取额外操作。通过查询查找各类数据库对象的 DEFINER 条目时,这些系统用户已被排除在外。

  1. 运行以下查询,找出事件中的 DEFINER
select definer, event_schema, event_name from information_schema.events where definer not like '%mysql%' and definer not like '%debian%';

在与非系统用户关联的事件中,未发现 DEFINER

  1. 运行以下查询,找出例程中的 DEFINER
select definer, routine_schema, routine_name from information_schema.routines where definer not like '%mysql%' and definer not like '%debian%';

在与非系统用户关联的例程中,未发现 DEFINER

  1. 运行以下查询,找出触发器中的 DEFINER
select definer, trigger_schema, trigger_name from information_schema.triggers where definer not like '%mysql%' and definer not like '%debian%';

在与非系统用户关联的触发器中,未发现 DEFINER

  1. 运行以下查询,找出视图中的 DEFINER
select definer, security_type, table_schema, table_name from information_schema.views where definer not like '%mysql%' and definer not like '%debian%' order by definer;
  1. 查看与 mhill 关联的名为 invoices_storenum_3656 的视图的详细信息:
definer security_type table_schema table_name
admin@localhost DEFINER customers_data customers_single
admin@localhost DEFINER sales_data invoices_storenum_5173
bsmith@localhost DEFINER customers_data customers_married
bsmith@localhost DEFINER sales_data invoices_storenum_3980
mhill@localhost DEFINER sales_data invoices_storenum_3656

在下一部分中,您将会把此视图的 DEFINER 更新为 INVOKER。

请注意,之前找出的用户 (dwilliams) 未与视图中的任何 DEFINER 条目相关联。此外,请注意,根用户没有 DEFINER 实例。无需针对 dwilliams 和根用户执行任何操作。

将 DEFINER 更新为 INVOKER

在此子任务中,您需要将与 mhill 相关联的 DEFINER 条目更新为 INVOKER

  1. 运行以下命令,查看与 mhill 关联的视图的详细信息:
select definer, security_type, table_schema, view_definition from information_schema.views where table_name = 'invoices_storenum_3656';
  1. 选择与该视图关联的数据库:
use sales_data;
  1. 运行以下命令,将该视图的 DEFINER 更新为 INVOKER
alter sql security INVOKER view invoices_storenum_3656 as (select * from invoices where storeNum = 3656);
  1. 再次查看 DEFINER 条目,确认该视图的条目已更新为 INVOKER
select definer, security_type, table_schema, table_name from information_schema.views where definer not like '%mysql%' and definer not like '%debian%' order by definer;

请注意,与 mhill 相关联的 DEFINER 条目已更新为 INVOKER,而与管理员和 bsmith 相关联的 DEFINER 条目保持不变。

结束终端会话

  1. 退出 MySQL 交互式控制台:
exit
  1. 退出终端会话:
exit

点击“检查我的进度”,验证已完成以下目标: 在 MySQL 源实例上将 DEFINER 子句更新为 INVOKER。

任务 3. 创建并保存 Database Migration Service 作业,但不启动该作业

在本任务中,您将创建并保存迁移作业,但不启动该作业。具体来说,您将创建一次性迁移作业,并选择 VPC 对等互连作为连接选项;不过,您也可以创建并保存任何迁移作业,以便日后运行。

这样一来,您能够在完成必要任务(例如在目标实例上创建新用户)之前,先创建 Cloud SQL 目标实例而无需迁移数据。

获取 MySQL 源实例的连接信息

  1. 在 Google Cloud 控制台的导航菜单 (“导航菜单”图标) 中,依次点击 Compute Engine > 虚拟机实例

  2. 找到 dms-mysql-training-vm 实例所在的行。

  3. 复制内部 IP 字段的值(例如 10.128.0.2)。

为 MySQL 源实例创建新的连接配置文件

  1. 在 Google Cloud 控制台标题栏的搜索字段中输入数据库迁移,然后在搜索结果中点击数据库迁移

  2. 点击左侧窗格中的连接配置文件,然后点击创建配置文件

  3. 设置以下必要的连接配置文件信息,所有其他设置均保留其默认值:

属性
配置文件角色 来源
数据库引擎 MySQL
连接配置文件名称 mysql-vm
连接配置文件 ID 保留自动生成的值
主机名或 IP 地址 输入您在上一个任务中复制的 MySQL 源实例的内部 IP(例如 10.128.0.2)
端口 3306
用户名 admin
密码 changeme!
区域
  1. 点击创建

一个名为 mysql-vm 的新连接配置文件即会显示在连接配置文件列表中。

创建新的一次性迁移作业

  1. 在左侧窗格中,点击迁移作业,然后点击创建迁移作业

  2. 如要创建迁移作业,请在开始标签页中设置以下值:

属性
迁移作业名称 vm-to-cloudsql
迁移作业 ID 保留自动生成的值
源数据库引擎 MySQL
目标区域
迁移作业类型 一次性

所有其他设置均保留默认值。

  1. 点击保存并继续

定义源实例

  1. 指定来源标签页上,为来源连接配置文件选择 mysql-vm

  2. 对于其他设置,请保留默认值。

  3. 点击保存并继续

定义目标实例

  1. 定义目标数据库标签页中,为目标集群的类型选择现有实例

  2. 目标实例选择

  3. 点击选择并继续

  4. 再次输入实例名称,然后点击确认并继续

注意:此步骤可能需要几分钟才能完成。

如果系统要求您重试请求,请点击重试按钮以刷新 Service Networking API。

如果您收到错误消息,但没有重试提示,请务必完成本实验设置和要求部分中的步骤,验证 Service Networking API 是否已启用。

完成此步骤后,系统即会显示一条更新消息,告知您该实例会使用现有的托管式服务连接

保存此目标实例可能需要几分钟时间。

确定连接方法

  1. 确定连接方法标签页中,为连接方法选择 VPC 对等互连

  2. 对于 VPC,选择默认

Database Migration Service 会使用您为 VPC 网络(在本例中为默认网络)提供的信息配置 VPC 对等互连。

  1. 点击配置并继续

保存一次性迁移作业

  1. 查看迁移作业的详细信息。

  2. 点击创建作业

您无需测试该迁移作业。请注意,现在测试该作业会导致出现错误消息,因为其中存在与目标实例中尚未创建的用户相关联的 DEFINER 条目。您将在下一个任务中创建这些用户。

  1. 如果系统提示您确认,请点击创建

迁移作业已创建,但尚未开始。您将在后续任务中启动该作业,具体是在 Cloud SQL 目标实例中创建新用户之后。

点击“检查我的进度”以验证是否完成了以下目标: 创建并保存 Database Migration Service 作业,但不启动该作业。

任务 4. 在 Cloud SQL 目标实例上创建必要的用户

在 Cloud SQL 中运行迁移作业之前,您应先创建必要的 MySQL 用户。其中包括管理员和超级用户,在发放更宽松的 IAM 权限之前,您需要先通过他们来测试迁移结果。此外,您还需要在开始迁移之前创建与 DEFINER 子句相关联的用户。

在本任务中,您将创建名为 admin、bsmith 和 mhill 的用户。

  1. 在 Google Cloud 控制台标题栏的搜索字段中输入 Cloud SQL,然后在搜索结果中点击 Cloud SQL

  2. 展开 mysql-cloudsql-master 实例,然后点击 mysql-cloudsql 实例。

  3. 副本实例菜单中,点击用户

  4. 点击添加用户账号

  5. 在下表中设置相关属性,其他所有设置均保留默认值:

属性
用户名 admin
密码 changeme!
主机名 按 IP 地址或地址范围限制主机
主机 localhost
  1. 点击添加

  2. 重复执行第 4-6 步,再创建两个具有 localhost 访问权限的用户:

用户 密码
bsmith mustchangeasap!
mhill update!

点击“检查我的进度”以验证是否完成了以下目标: 在 Cloud SQL 目标实例上创建用户。

任务 5. 运行之前创建的迁移作业

开始迁移作业

  1. 在 Google Cloud 控制台标题栏的搜索字段中输入数据库迁移,然后在搜索结果中点击数据库迁移。> 迁移作业**。

  2. 在左侧窗格中,点击“迁移作业”,然后点击迁移作业 vm-to-cloudsql 以查看详情页面。

  3. 点击开始按钮运行迁移作业。

如果系统提示您确认,请点击开始

  1. 查看迁移作业状态。
    • 如果作业尚未启动,状态会显示为“尚未开始”。您可以选择启动或删除该作业。
    • 作业启动后,状态为“正在启动”,然后变为“正在运行”
    • 当作业状态变为“已完成”时,表示迁移作业已成功完成,您可以继续执行下一项任务。

点击“检查我的进度”以验证是否完成了以下目标: 运行之前创建的 Database Migration Service 作业。

任务 6. 确认 Cloud SQL for MySQL 中的用户元数据

连接到 MySQL 实例

  1. 在 Google Cloud 控制台标题栏的搜索字段中输入 Cloud SQL,然后在搜索结果中点击 Cloud SQL

  2. 点击名为 mysql-cloudsql 的实例 ID。

  3. 主实例菜单中,点击概览

  4. 向下滚动到连接到此实例面板,然后点击打开 Cloud Shell

连接到 MySQL 的命令已预先填充在 Cloud Shell 中,命令如下:

gcloud sql connect mysql-cloudsql --user=root --quiet
  1. 运行预先填充的命令。

如果出现提示,请点击授权以使用 API。

  1. 当系统提示输入密码时,请输入您之前设置的密码:
supersecret!

您现在已激活 MySQL 交互式控制台。

查看 Cloud SQL for MySQL 实例中的用户元数据

  1. 运行以下查询,查看非系统用户:
select host, user, authentication_string from mysql.user where user not like '%mysql%' and user not like '%debian%' order by user;

请注意您在上一个任务中创建的用户。

  1. 运行以下查询,查看用户元数据是否已成功迁移:
select definer, security_type, table_schema, table_name from information_schema.views where definer not like '%mysql%' and definer not like '%debian%' order by definer;
  1. 查看条目,确认 invoices_storenum_3656 的元数据已成功迁移:
definer security_type table_schema table_name
admin@localhost DEFINER customers_data customers_single
admin@localhost DEFINER sales_data invoices_storenum_5173
bsmith@localhost DEFINER customers_data customers_married
bsmith@localhost DEFINER sales_data invoices_storenum_3980
mhill@localhost INVOKER sales_data invoices_storenum_3656
  1. 运行以下命令,在 MySQL 交互式控制台中选择数据库:
use sales_data;
  1. 查询与 mhill 关联的视图,以检查其是否成功执行:
select * from invoices_storenum_3656;

查询返回了 27 行。

  1. 退出 MySQL 交互式控制台:
exit

点击“检查我的进度”以验证是否完成了以下目标: 确认 Cloud SQL for MySQL 中的用户元数据

恭喜!

您已了解如何在运行 Database Migration Service 作业时迁移 MySQL 用户数据。

后续步骤/了解详情

详细了解数据迁移、Cloud SQL 数据库和 Database Migration Service:

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2025 年 12 月 4 日

本实验的最后测试时间:2025 年 12 月 10 日

版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。