AWS 服务指南上的 MySQL HeatWave  /  第 6 章导入数据

第 6 章导入数据

本章介绍如何使用 MySQL Shell 从源 MySQL 服务器导出数据并将其导入 AWS 上的 MySQL HeatWave 上的数据库系统。

数据必须先导入数据库系统,然后才能加载到 HeatWave 中。有关将数据加载到 HeatWave 的信息,请参阅 第 7 章,管理 HeatWave 数据

描述了以下主题:

关于 MySQL 外壳

MySQL Shell 是推荐的实用程序,用于从源 MySQL 服务器导出数据并将其导入 AWS 上的 MySQL HeatWave 上的数据库系统。MySQL Shell 转储和加载实用程序专为与 MySQL 数据库系统一起使用而构建。要获得最佳功能,请始终使用可用的最新版本的 MySQL Shell。

MySQL HeatWave 在 AWS 上使用的 MySQL Server 版本完全受 MySQL Shell 支持。MySQL Shell 支持的最低支持源 MySQL Server 版本是:

  • MySQL 8.0.11

  • MySQL 5.7.9

  • MySQL Shell 8.0.26 或更高版本支持 MySQL 5.6.10。从 MySQL Shell 8.0.22 开始,可以从 MySQL 5.6.10 或更高版本的实例中转储实例、模式和表,但无法转储用户帐户。要转储用户帐户,您必须使用 MySQL Shell 8.0.26 或更高版本。

MySQL Shell 提供以下实用程序:

要将模式导入 MySQL 数据库系统,MySQL Shell 必须安装在可以访问数据库系统的机器上。有关说明,请参阅 第 5.2.1 节,“使用 MySQL Shell 连接”

MySQL Shell 转储文件导出为指定模式结构的 DDL 文件和.tsv包含数据的制表符分隔值 () 文件。默认情况下 ,.tsv文件使用 zstd压缩,但gzip 也可作为选项使用。您也可以选择不压缩。

为了提高性能,默认情况下对大表进行分块。默认块大小为 32MB。可以禁用分块,但不建议对大型数据库这样做。导入时,chunk可以通过并行线程导入,大大提高导入性能。

有关 MySQL Shell 的更多信息,请参阅 MySQL Shell 用户指南

MySQL 服务器兼容性

AWS 上的 MySQL HeatWave 有几个与安全相关的限制,这些限制在 MySQL 的本地实例中不存在。为了更轻松地将现有数据库加载到服务中,MySQL Shell 中的转储命令可以检测潜在问题,并且在某些情况下,会自动调整您的架构定义以使其符合要求。

当该ocimds选项设置为 true 时,会对这些问题的模式执行兼容性检查,并在发现任何问题时中止转储,同时生成这些问题的详细列表并建议其他步骤来纠正这些问题。命令仅允许导入在启用该选项 loadDump的情况下创建的转储。ocimds

该选项发现的一些问题ocimds可能需要您手动编辑您的模式,然后才能将其加载到 AWS 上的 MySQL HeatWave 中。MySQL Shell compatibility选项可用于自动修改转储模式,解决其中一些兼容性问题。您可以将一个或多个修饰符传递给逗号分隔列表中的 MySQL Shellcompatibility选项。

MySQL Shellcompatibility选项对转储输出中的所有表应用与 AWS 上的 MySQL HeatWave 兼容的指定要求,并根据需要更改转储文件。从 MySQL Shell 8.0.23 开始,此选项可用于所有 MySQL Shell 实用程序,在该版本之前,它仅可用于实例转储实用程序和模式转储实用程序。

MySQL Shellcompatibility选项修饰符包括:

force_innodb

AWS 上的 MySQL HeatWave 仅支持 InnoDB 存储引擎。此选项修改语句的ENGINE=子句 CREATE TABLE以指定INNODB尚未使用InnoDB 存储引擎的表。

skip_invalid_accounts

跳过使用 AWS 上的 MySQL HeatWave 不支持的外部身份验证插件创建的用户帐户。从 MySQL Shell 8.0.26 开始,此选项还会删除没有设置密码的用户帐户,除非没有密码的帐户被标识为角色,在这种情况下,它会使用CREATE ROLE语句转储。

strip_definers

DEFINER=account从视图、例程、事件和触发器中 删除子句。AWS 上的 MySQL HeatWave 需要特殊权限才能使用加载模式的用户以外的定义器创建这些对象。通过删除该 DEFINER子句,将使用该默认定义器创建这些对象。视图和例程的SQL SECURITY子句从更改 DEFINERINVOKER. 这确保应用查询或调用这些对象的帐户的访问权限,而不是创建它们的用户。如果您的数据库安全模型要求视图和例程比它们的调用者有更多的权限,您必须在加载它之前手动修改模式。有关详细信息,请参阅 DEFINER 属性SQL SECURITY 特性

strip_restricted_grants

某些权限在 AWS 上的 MySQL HeatWave 中受到限制,例如 RELOADFILESUPERBINLOG_ADMINSET_USER_ID。无法创建授予这些权限的用户。GRANT此选项从转储语句 中删除这些特权 。

strip_tablespaces

AWS 上的 MySQL HeatWave 对表空间有一些限制。此修饰符从语句中删除TABLESPACE子句 GRANT,因此所有表都在其默认表空间中创建。

此外,DATA DIRECTORY如果启用了 MySQL Shell 选项,则 语句中的INDEX DIRECTORY、 和ENCRYPTION选项CREATE TABLE始终在 DDL 脚本中被注释掉 。ocimds

笔记

如果您打算从旧版本的 MySQL(例如支持的最低源版本 5.6.10)导出数据,建议运行 MySQL Shell Upgrade Checker Utility 以生成有关迁移的所有潜在问题的报告。有关详细信息,请参阅 MySQL Shell 用户指南 - 升级检查器实用程序

使用 MySQL Shell 导出数据

此任务描述如何使用 MySQL Shell 从源 MySQL 服务器导出数据。

此任务需要以下内容:

  • MySQL Shell 命令行实用程序。本任务中的命令使用MySQL Shell的JS(JavaScript)执行方式。有关安装说明,请参阅 安装 MySQL Shell

    笔记

    MySQL Shell 8.0.27 或更高版本创建的导出不能由早期版本的 MySQL Shell 导入。始终建议使用最新版本的 MySQL Shell。

  • 您已在和 参数设置为 true的情况下运行该dumpSchema命令;例如: dryRunocimds

    MySQL>JS> util.dumpSchemas(["tpch"], "tpchdump", {dryRun: true, ocimds: true})

    其中tpch是架构名称, tpchdump是转储文件的本地目录。

    这将执行导出的测试运行,检查兼容性问题。输出中列出了兼容性问题和修复步骤。有关解决兼容性问题的更多信息,请参阅 MySQL Shell 实例和架构转储实用程序

从源 MySQL 服务器导出数据时,您可以使用导出整个 MySQL 实例,也可以使用导出 dumpInstance()特定模式 dumpSchemas()。每个命令的语法是:

  • util.dumpInstance(outputUrl[, options])

  • util.dumpSchemas(schemas, outputUrl[, options])

以下任务dumpSchemas()与 MySQL Shellcompatibility选项一起使用以导出名为tpch.

从源 MySQL 服务器导出模式:

  1. 启动 MySQL Shell 会话并连接到源 MySQL 服务器;例如:

    $> mysqlsh user@HostNameOfSourceMySQLServer

    有关不同 MySQL Shell 会话和连接选项的信息,请参阅 MySQL Shell 用户指南

  2. dumpSchemas() 使用带有任何所需 MySQL Shell 选项和 compatibility选项修饰符 的实用程序导出架构。此命令使用ocimds带有多个兼容性选项修饰符的选项。

    MySQL>JS> util.dumpSchemas(["tpch"], "/home/user1/tpchdump", {"ocimds": "true", 
              "compatibility": ["force_innodb", "strip_definers", "strip_tablespaces"]})

    在哪里:

    • tpch是正在导出的模式的名称。

    • /home/user1/tpchdump是写入架构转储文件的位置(本地目录)。

    • ocimds检查您的数据与 AWS 上的 MySQL HeatWave 的兼容性。如果设置为 true,则无法导出与 AWS 上的 MySQL HeatWave 不兼容的数据。

    • compatibility指定兼容性修饰符,修改导出的数据以与 AWS 上的 MySQL HeatWave 兼容。

笔记

对于大型数据集,建议使用 MySQL Shell bytesPerChunk选项来定义更大的块。默认块大小为 32MB。要增加单个块的大小,请将 bytesPerChunk选项添加到命令中。例如:bytesPerChunk: 128M指定块大小为 128MB。

有关更多信息dumpInstancedumpSchemas选项,请参阅 实例转储实用程序、架构转储实用程序和表转储实用程序

使用 MySQL Shell 导入数据

此任务描述如何将 MySQL Shell 转储导入 MySQL 数据库系统。

此任务需要以下内容:

  • MySQL Shell 8.0.27 或更高版本。MySQL Shell 8.0.27 或更高版本创建的导出不能由早期版本的 MySQL Shell 导入。

  • 按照使用 MySQL Shell 导出数据中 描述的说明从源 MySQL 服务器 导出数据。

  • 数据库系统上有足够的存储空间用于要导入的数据。要检查数据库系统存储空间,请参阅 第 3.4 节,“查看数据库系统详细信息”

  • 您已loadDump()在模式下运行命令 dryrun以检查转储文件从本地目录加载到连接的 MySQL 数据库系统时是否没有问题;例如:

    MySQL>JS> util.loadDump("/home/user1/tpchdump", {dryRun: true})

以下任务使用loadDump()实用程序加载在 使用 MySQL Shell 导出数据中导出的模式。

要导入模式:

  1. 启动 MySQL Shell 会话并连接到数据库系统;例如:

    $> mysqlsh Username@HostNameOfMySQLDBSystem

    有关使用 MySQL Shell 连接到数据库系统的信息,请参阅 第 5.2.1 节,“使用 MySQL Shell 连接”

  2. 运行以下命令以 使用该实用程序 导入tpch架构 。loadDump()

    MySQL>JS> util.loadDump("/home/user1/tpchdump", {threads: 8})

    在哪里:

    • /home/user1/tpchdump是 MySQL shell 转储文件的位置。

    • threads指定用于此任务的处理线程数。默认值为 4。为了获得最佳性能,建议将此参数设置为目标 MySQL 数据库系统使用的 CPU 数量的两倍。