MySQL 外壳 8.0  / 第 11 章 MySQL Shell 实用程序  /  11.6 转储加载实用程序

11.6 转储加载实用程序

MySQL Shell 的转储加载实用程序 util.loadDump()在 MySQL Shell 8.0.21 中引入,支持导入到 MySQL 数据库服务数据库系统(简称 MySQL DB 系统)或使用 MySQL Shell 的 第 11.5 节转储的模式或表的 MySQL 服务器实例,“实例转储实用程序、模式转储实用程序和表转储实用程序”。转储加载实用程序提供来自远程存储的数据流、表或表块的并行加载、进度状态跟踪、恢复和重置功能,以及转储仍在进行时并发加载的选项。要获得最佳功能,请始终使用最新版本的 MySQL Shell 的转储和转储加载实用程序。

关于实用程序

要导入 MySQL 数据库系统,MySQL Shell 必须安装在有权访问 MySQL 数据库系统的 Oracle Cloud Infrastructure Compute 实例上。如果转储文件位于 Oracle Cloud Infrastructure 对象存储桶中,您可以从计算实例访问对象存储桶。如果转储文件在您的本地系统上,您需要使用您选择的复制实用程序将它们传输到 Oracle Cloud Infrastructure Compute 实例,具体取决于您为 Compute 实例选择的操作系统。确保转储是使用设置为的ocimds选项 创建的true在 MySQL Shell 的实例转储实用程序或模式转储实用程序中,以与 MySQL 数据库服务兼容。MySQL Shell 的表转储实用程序不使用此选项。

对于实例转储实用程序或模式转储实用程序生成的输出,MySQL Shell 的转储加载实用程序使用 DDL 文件和制表符分隔的.tsv数据文件在目标 MySQL 实例中设置服务器实例或模式,然后加载数据。仅包含 DDL 文件或仅包含数据文件的转储可用于单独执行这些任务。转储加载实用程序还允许您从包含这两种文件的常规转储中分别应用 DDL 文件和数据文件。

您可以使用该实用程序的选项在导入中包含或排除指定的架构和表、用户及其角色和授权、事件、例程和触发器。请注意,默认情况下,用户及其角色和授权被排除在负载之外。如果您指定了冲突的包含和排除选项,或者命名了一个无论如何都不包含在转储文件中的对象,那么在 MySQL Shell 8.0.28 之前,这种情况将被忽略并且加载在没有对象的情况下继续进行。从 MySQL Shell 8.0.28 开始报告错误并且加载停止,因此您可以更正选项。

对于 MySQL Shell 的表转储实用程序生成的输出,从 MySQL Shell 8.0.23 开始,转储包含设置最初包含该表的模式所需的信息。默认情况下,从该版本开始,如果模式不存在,则会在目标 MySQL 实例中重新创建它。或者,您可以指定schema dump loading 实用程序中的选项,用于将表加载到目标 MySQL 实例中的替代模式,该模式必须存在于那里。在 MySQL Shell 8.0.22 中,表转储实用程序的文件不包含架构信息,因此目标架构必须存在于目标 MySQL 实例中。在该版本中,默认情况下,全局 MySQL Shell 会话的当前模式用作目标模式,或者 schema可以使用该选项来命名模式。

您可以使用您选择的一组转储加载选项进行试运行,以显示当您使用这些选项实际运行该实用程序时将执行哪些操作。

waitDumpTimeout选项允许您应用仍在创建过程中的转储。表在可用时加载,并且实用程序在新数据停止到达转储位置后等待指定的秒数。当超时结束时,该实用程序假定转储已完成并停止导入。

导入的进度状态存储在持久进度状态文件中,该文件记录成功完成的步骤以及中断或失败的步骤。默认情况下,进度状态文件 在转储目录中命名和创建,但您可以选择不同的名称和位置。当您恢复或重试转储导入时,转储加载实用程序会引用进度状态文件,并跳过已完成的步骤。为部分加载的表自动管理重复数据删除。如果您使用Ctrl + C中断正在进行的转储,则在第一次使用该组合键时,该实用程序不会启动任何新任务,但现有任务会继续。紧迫load-progress.server_uuid.jsonCtrl + C再次停止现有任务,导致出现错误消息。在任何一种情况下,该实用程序仍然可以从它停止的地方恢复导入。

您可以选择重置进度状态并从头开始重新导入转储,但在这种情况下,该实用程序不会跳过已经创建的对象,也不会管理重复数据删除。如果这样做,为确保正确导入,您必须从目标 MySQL 实例中手动删除所有先前从该转储中加载的对象,包括模式、表、用户、视图、触发器、例程和事件。否则,如果转储文件中的对象已存在于目标 MySQL 实例中,则导入会因错误而停止。在适当谨慎的情况下,您可以使用 ignoreExistingObjects使实用程序报告重复对象但跳过它们并继续导入的选项。请注意,该实用程序不会检查目标 MySQL 实例和转储文件中对象的内容是否不同,因此生成的导入可能包含不正确或无效的数据。

重要的

不要在转储停止和转储恢复之间更改转储文件中的数据。更改数据后恢复转储具有未定义的行为,可能导致数据不一致和数据丢失。如果您需要在部分加载转储后更改数据,请手动删除在部分导入期间创建的所有对象(如进度状态文件中所列),然后运行转储加载实用程序并resetProgress选择从头重新开始。

如果您需要在将转储数据文件中的任何数据导入到目标 MySQL 实例之前对其进行修改,您可以通过结合 MySQL Shell 的并行表导入实用程序来完成此操作 util.importTable()使用转储加载实用程序。为此,首先使用转储加载实用程序只加载所选表的 DDL,以在目标服务器上创建表。然后使用并行表导入实用程序从表的输出文件中捕获和转换数据,并将其导入到目标表中。根据需要对要修改数据的任何其他表重复该过程。最后,使用转储加载实用程序加载您不想修改的任何剩余表的 DDL 和数据,不包括您修改过的表。有关该过程的说明,请参阅 修改转储数据

转储中的表按您使用该threads选项指定的线程数并行加载,默认为 4。如果在创建转储时表数据被分块,则多个线程可以用于一个表,否则每个线程加载一个一次表。转储加载实用程序安排跨线程的数据导入以最大限度地提高并行度。从 MySQL Shell 8.0.27 开始,后台线程池用于获取文件内容。如果转储文件被 MySQL Shell 的转储实用程序压缩,则转储加载实用程序会为它们处理解压缩。

默认情况下,表的全文索引仅在表完全加载后创建,这样可以加快导入速度。您可以选择推迟所有索引的创建(主索引除外),直到每个表都完全加载。您还可以选择在表导入期间创建所有索引。您还可以选择在导入期间禁用索引创建,然后再创建索引,例如,如果您想在加载后更改表结构。

为了进一步提高数据加载性能,您可以InnoDB在导入期间禁用目标 MySQL 实例上的重做日志。请注意,这只能在新的 MySQL 服务器实例(而非生产系统)上完成,并且此功能在 MySQL 数据库系统上不可用。有关详细信息,请参阅 禁用重做日志记录

要求和限制

  • 加载转储的目标 MySQL 实例需要 MySQL 5.7 或更高版本。

  • MySQL Shell 8.0.27 之前版本的 MySQL Shell 的转储加载实用程序无法加载使用 MySQL Shell 8.0.27 或更高版本中的转储实用程序创建的转储。这是因为从 MySQL Shell8.0.27 开始,转储元数据中包含有关创建转储时使用的功能的信息。此功能列表不向后兼容,但在未来版本添加新功能时支持向后兼容。要获得最佳功能,请始终使用最新版本的 MySQL Shell 的转储和转储加载实用程序。

  • 转储加载实用程序使用该LOAD DATA LOCAL INFILE语句,因此 local_infile目标 MySQL 实例上的系统变量的全局设置必须 ON在导入期间有效。默认情况下,此系统变量 ON在标准 MySQL 数据库系统配置中设置为。

  • LOAD DATA LOCAL INFILE语句使用非限制性数据解释,将错误转化为警告并继续加载操作。此过程可以包括为字段分配默认值和隐式默认值,以及将无效值转换为最接近列数据类型的有效值。有关语句行为的详细信息,请参阅LOAD DATA

  • 在目标 MySQL 实例上,转储加载实用程序检查 sql_require_primary_key 系统变量是否设置为ON,如果是,如果转储文件中存在没有主键的表,则返回错误。默认情况下,此系统变量OFF在标准 MySQL 数据库系统配置中设置为。

  • 转储加载实用程序不会自动将 gtid_executed 源 MySQL 实例中的 GTID 集应用到目标 MySQL 实例上。GTID 集包含在 MySQL Shell 的实例转储实用程序、模式转储实用程序或表转储实用程序的转储元数据中,作为 转储文件gtidExecuted中的字段 。@.json要将这些 GTID 应用于目标 MySQL 实例以用于复制,请使用该updateGtidSet选项或手动导入它们,具体取决于目标 MySQL 实例的版本和 MySQL Shell 版本。从 MySQL Shell 8.0.23 开始,这在 MySQL 数据库系统实例上受支持。请参阅说明updateGtidSet 详细信息选项。

使用 PAR 加载转储文件

MySQL Shell 支持使用预验证请求 (PAR) 从对象存储桶加载转储文件。PAR 提供了一种方法,让用户无需拥有自己的凭据即可访问存储桶或对象。

重要的

在使用此访问方法之前,请评估对存储桶或存储桶中的对象进行预身份验证访问的业务要求和安全后果。PAR 使任何拥有 PAR 访问权限的人都可以访问请求中标识的目标。仔细管理 PAR 的分配。

从 MySQL Shell 8.0.27 开始,MySQL Shell 支持对桶中的所有对象或桶中具有特定前缀的对象使用读取访问 PAR(对象读取 PAR)。有关创建存储桶 PAR 和前缀 PAR 的信息,请参阅 使用预验证请求。使用存储桶 PAR 或前缀 PAR 时,转储加载实用程序需要本地进度状态文件。该文件的内容是 JSON 格式,因此带有.json扩展名的文本文件是合适的(例如,progress.json.)。以下示例显示了使用为存储桶中的所有对象创建的 PAR 加载转储文件的语法:

JS> util.loadDump("BucketPARURL", {progressFile: "progress.json"})

使用相同的语法将对象加载到具有特定前缀的存储桶中,但在本例中,PAR URL 包含前缀:

shell-js> util.loadDump("PrefixPARURL", progressFile: "progress.json"})

从 MySQL Shell 8.0.22 开始,MySQL Shell 支持使用为 MySQL Shell 转储清单文件 () 创建的读取访问 PAR(对象读取 PAR)@.manifest.json从对象存储桶加载数据。有关为清单文件等特定对象创建 PAR 的信息,请参阅 使用预验证请求。启用该 ociParManifest选项后,MySQL Shell 转储加载实用程序会在将数据导出到对象存储桶时创建一个清单文件。清单文件包含转储中每个项目的 PAR。在 MySQL 8.0.27 之前,如果ocimds启用该选项并且该选项提供了存储桶名称osBucketNameociParManifest自动启用。从 MySQL Shell 8.0.27 开始,引入了对存储桶中所有对象或存储桶中具有特定前缀的对象的 PAR 支持,该ociParManifest选项默认设置为,只有在明确 false设置时才启用。true

使用为清单文件创建的 PAR 时,需要一个进度状态文件。该文件的内容是 JSON 格式,因此带有.json扩展名的文本文件是合适的(例如,progress.json.)。进度状态文件可以在对象存储桶中与转储文件相同的前缀位置创建,也可以在本地创建。如果进度状态文件是在对象存储桶中创建的,则必须为进度状态文件创建一个读写访问PAR(Object Read Write PAR)。有关为特定对象创建 PAR 的信息,请参阅 使用预验证请求. 您可以使用具有所需权限的任何用户帐户为进度状态文件创建 PAR。本地进度状态文件不需要 PAR。如果您没有创建 PAR 所需的权限,请考虑使用本地进度状态文件。请注意,本地进度文件不允许在发生故障时从不同位置恢复进度。

笔记

使用创建转储ociParManifest 选项启用生成一个清单文件,其中包含转储中每个项目的 PAR。为转储中的每个项目生成 PAR 对于大型数据集来说非常耗时,并且必须为清单文件和可能的进度状态文件创建一个额外的 PAR。此外,当 PAR 过期时,必须重新创建转储以便为转储中的项目重新生成 PAR。出于这些原因,使用存储桶或前缀 PAR(受 MySQL Shell 8.0.27 支持)是从对象存储存储桶加载 MySQL Shell 转储文件的推荐方法。当使用桶或前缀 PAR 时,只有一个 PAR 可以创建和管理,转储中的每个项目都不需要 PAR。

以下示例显示了使用为清单文件和进度状态文件创建的 PAR 加载转储文件的语法。如果使用本地进度状态文件,该 progressFile选项指定本地进度状态文件的路径而不是 PAR URL。

shell-js> util.loadDump("PARURLofManifest", {osBucketName: "mds-bucket", 
          osNamespace: "NamespaceID", progressFile: "RWPARUrlOfJsonProgressFile"})

虽然转储仍在进行中,但转储加载实用程序会监视并等待新添加到清单文件,而不是对象存储桶。

运行实用程序

转储加载实用程序使用 MySQL Shell 全局会话来获取转储要导入到的目标 MySQL 实例的连接详细信息。在运行该实用程序之前,您必须打开全局会话(它可以具有 X 协议连接或经典 MySQL 协议连接)。该实用程序为每个线程打开自己的会话,从全局会话中复制连接压缩和 SSL 选项等选项,并且不会进一步使用全局会话。

在 MySQL Shell API 中,转储加载实用程序是util全局对象的函数,具有以下签名:

util.loadDump(url[, options])

options是一个选项字典,如果它为空则可以省略。这些选项在本主题的其余部分中列出。

如果要导入位于运行该实用程序的 Oracle Cloud Infrastructure Compute 实例的文件系统中的转储,则为url指定包含转储文件的本地目录路径的字符串。您可以为本地目录路径加上 file://架构前缀。在 MySQL Shell 的 JavaScript 模式下的这个例子中,执行空运行以检查转储文件从本地目录加载到连接的 MySQL 实例时不会出现问题:

shell-js> util.loadDump("/mnt/data/worlddump", {dryRun: true})

如果您从 Oracle Cloud Infrastructure 对象存储桶导入转储,url则转储文件在桶中的路径前缀是在outputUrl创建转储时使用参数分配的。使用该osBucketName选项提供对象存储桶的名称,并使用该 osNamespace选项标识该桶的命名空间。在 MySQL Shell 的 JavaScript 模式下的这个示例中,worlddump使用 8 个线程将转储前缀从对象存储桶加载到连接的 MySQL 数据库系统中:

shell-js> util.loadDump("worlddump", {
          threads: 8, osBucketName: "hanna-bucket", osNamespace: "idx28w1ckztq"})

对象存储桶的命名空间显示在 Oracle Cloud Infrastructure 控制台中桶详细信息页面的 Bucket Information选项卡中,或者可以使用 Oracle Cloud Infrastructure 命令行界面获取。使用默认 Oracle Cloud Infrastructure CLI 配置文件中的默认配置文件或您使用ociConfigFileociProfile选项指定的替代详细信息与对象存储桶建立连接。有关设置 CLI 配置文件的说明,请参阅 SDK 和 CLI 配置文件

负载控制选项

dryRun: [ true | false ]

显示有关在给定指定选项和转储文件的情况下将执行哪些操作的信息,包括将根据转储内容返回的任何错误,但不继续导入。默认值为 false

waitDumpTimeout: number

将此选项设置为大于 0 的值会在转储仍在生成时激活转储的并发加载。该值是一个超时(以秒为单位),在处理完转储位置中所有上传的数据块后,该实用程序等待进一步的数据。这允许实用程序在转储仍在创建过程中时导​​入转储。数据在可用时进行处理,并且在超过超时且转储位置中不再显示任何数据时停止导入。默认设置,0, 意味着当所有上传的数据块都已处理并且不等待更多数据时,该实用程序将转储标记为完成。使用默认设置,并发加载被禁用。

schema: "string"

必须将 MySQL Shell 的转储实用程序生成的转储加载到的目标模式。

从 MySQL Shell 8.0.31 开始,如果模式不存在,则会创建它,并将转储加载到该新模式。如果新架构名称与转储中的架构名称不同,转储将加载到新架构,但不会对加载的数据进行任何更改。也就是说,对旧模式名称的任何引用都保留在数据中。所有存储过程、视图等都引用原始架构,而不是新架构。

单个模式转储或导致单个模式的过滤选项支持此加载选项。

从 MySQL Shell 8.0.23 开始,不需要此选项,因为来自表转储实用程序的转储文件包含设置最初包含该表的模式所需的信息。默认情况下,从该版本开始,如果模式不存在,则会在目标 MySQL 实例中重新创建它。或者,您可以指定将schema表加载到目标 MySQL 实例中的替代模式的选项,该模式必须存在于那里。

在 MySQL Shell 8.0.22 中,表转储实用程序的转储文件不包含架构信息,因此目标架构必须存在于目标 MySQL 实例中。在该版本中,默认情况下,全局 shell 会话的当前模式用作目标模式,或者 schema可以使用该选项来命名目标模式。

threads: number

用于将数据块上传到目标 MySQL 实例的并行线程数。每个线程都有自己的 MySQL 实例连接。默认值为 4。如果转储是在启用分块(默认设置)的情况下创建的,则该实用程序可以使用多个线程为表加载数据;否则一个线程只用于一个表。

backgroundThreads: number

用于获取文件内容的后台线程池中的线程数。此选项和线程池可从 MySQL Shell 8.0.27 获得。默认值是从本地服务器加载的转储选项的值,或者是从非本地服务器加载的转储选项 threads 值的四倍。threads

progressFile: "string"

指定用于跟踪加载进度的本地进度状态文件的路径。根据加载操作的类型,允许使用其他值:

从本地存储加载转储时:

  • progressFile选项可以省略。 在这种情况下,将在转储目录中自动创建 一个名为的进度状态文件 。load-progress-server-uuid.json

  • progressFile选项可以设置为空字符串以禁用进度状态跟踪,这意味着转储加载实用程序无法恢复部分完成的导入。

使用预验证请求 (PAR) 从 OCI 对象存储加载转储时,该 progressFile选项是必需的。

  • 如果使用桶或前缀 PAR 执行加载操作,请将progressFile 选项设置为本地进度状态文件的路径。

  • 如果加载操作是使用清单文件 PAR 执行的,请将progressFile 选项设置为本地进度状态文件的路径,或者为与清单文件位于同一位置的进度状态文件指定写入 PAR。

如果指定了本地进度状态文件或有效的写入 PAR 但进度状态文件不存在,则将创建该文件。

showProgress: [ true | false ]

显示 ( true) 或隐藏 ( false) 导入进度信息。默认是trueif stdout是一个终端 ( tty),例如当 MySQL Shell 处于交互模式时,false否则。进度信息包括活动线程的数量及其操作、到目前为止加载的数据量、完成百分比和吞吐率。当不显示进度信息时,进度状态仍然记录在转储加载实用程序的进度状态文件中。

resetProgress: [ true | false ]

将此选项设置为true重置进度状态并从头开始重新导入。默认是false. 请注意,使用此选项时,转储加载实用程序不会跳过已创建的对象,也不会管理重复数据删除。如果要使用此选项,以确保正确导入,您必须首先从目标 MySQL 实例中手动删除所有以前加载的对象,包括模式、表、用户、视图、触发器、例程和来自该转储的事件。否则,如果转储文件中的对象已存在于目标 MySQL 实例中,则导入会因错误而停止。在适当谨慎的情况下,您可以使用该 ignoreExistingObjects选项使实用程序报告重复的对象,但跳过它们并继续导入。

skipBinlog: [ true | false ]

通过发出SET sql_log_bin=0 语句,为实用程序在导入过程中使用的会话跳过目标 MySQL 实例上的二进制日志记录。默认值为false,因此默认情况下二进制日志记录处于活动状态。对于 MySQL 数据库系统,不使用此选项,如果您尝试将其设置为 ,则导入将停止并出现错误true。对于其他 MySQL 实例, 如果您 在目标 MySQL 实例上应用来自源 MySQL 实例的 GTID 集 ,则始终设置skipBinlog为,或者使用truegtid_executedupdateGtidSet选项或手动。当 GTID 在目标 MySQL 实例 ( gtid_mode=ON) 上使用时,设置此选项 true可防止在执行导入时生成和分配新的 GTID,以便可以使用从源服务器设置的原始 GTID。sql_log_bin 用户帐户必须具有设置系统变量 所需的权限。

ignoreVersion: [ true | false ]

即使从中转储数据的 MySQL 实例的主版本号与数据将上传到的 MySQL 实例的主版本号不同,也导入转储。默认值为 false,这意味着如果主版本号不同,则会发出错误并且不会继续导入。当此选项设置为 时 true,会发出警告并继续导入。请注意,仅当转储文件中的模式与新的主要版本没有兼容性问题时,导入才会成功。

在尝试使用该 ignoreVersion选项导入之前,请使用 MySQL Shell 的升级检查器实用程序 checkForServerUpgrade()来检查源 MySQL 实例上的模式。在转储模式并将它们导入目标 MySQL 实例之前,修复该实用程序识别的任何兼容性问题。

ignoreExistingObjects: [ true | false ]

导入转储,即使它包含已存在于 MySQL 实例的目标架构中的对象。默认值为false,这意味着当发现重复对象时会发出错误并停止导入,除非导入是从先前使用进度状态文件的尝试恢复的,在这种情况下会跳过检查。当此选项设置为 true,会报告重复对象但不会生成错误并且导入会继续进行。应谨慎使用此选项,因为该实用程序不会检查目标 MySQL 实例和转储文件中对象的内容是否不同,因此导入结果可能包含不正确或无效的数据。另一种策略是使用excludeTables排除已加载表的选项,您已验证转储文件中的对象与目标 MySQL 实例中的导入对象相同。最安全的选择是在重新启动转储之前从目标 MySQL 实例中删除重复的对象。

从 MySQL Shell 8.0.23 开始,此选项还允许将不使用该 ocimds选项创建的转储导入 MySQL 数据库服务实例。

characterSet: "string"

用于导入到目标 MySQL 实例的字符集,例如在 语句的CHARACTER SET选项中 。LOAD DATA默认值是在由 MySQL Shell 的实例转储实用程序、模式转储实用程序或表转储实用程序创建转储时使用的转储元数据中给出的字符集,默认使用 utf8mb4. 字符集必须是character_set_client 系统变量允许的,并且是MySQL实例支持的。

maxBytesPerTransaction: number

可以在单个LOAD DATA 语句中从数据文件加载的最大字节数。如果数据文件超过该 maxBytesPerTransaction值,则多个 LOAD DATA语句以小于或等于该 maxBytesPerTransaction值的块从文件中加载数据。此选项可从 MySQL Shell 8.0.27 获得。

k可以使用千字节、 M兆字节和 G千兆字节 的单位后缀。最小值为 4069 字节。如果指定了较小的值,则隐式使用最小 4096 字节。如果maxBytesPerTransaction未设置该选项,则bytesPerChunk用于转储数据的值将用作大于 1.5 * 该bytesPerChunk 值的文件的默认设置。如果maxBytesPerTransaction 未设置该选项并且数据文件小于 1.5 * bytesPerChunk值,则在单个 LOAD DATA 语句中请求数据。

如果数据文件包含大于 maxBytesPerTransaction设置的行,则在单个 LOAD DATA语句中请求该行的数据。对于遇到的超过设置的第一行发出警告maxBytesPerTransaction

如果具有已配置 maxBytesPerTransaction设置的加载操作被中断并恢复执行,则会跳过已加载的块。恢复的加载操作使用当前maxBytesPerTransaction 设置。操作中断前使用的设置不会保存到进度状态文件中。

group_replication_transaction_size_limit 此选项的预期用途是当数据文件对于目标服务器的限制(例如服务器或 max_binlog_cache_size 设置 定义的限制)来说太大时,以较小的块加载数据 。例如,如果您 在加载数据时 收到错误“MySQL 错误 1197 (HY000):多语句事务需要超过‘max_binlog_cache_size’字节的存储”maxBytesPerTransaction ,请将其设置为小于或等于服务器实例 max_binlog_cache_size 设置的值。

sessionInitSql: list of strings

在每个客户端会话开始时运行的 SQL 语句列表,用于将数据加载到目标 MySQL 实例中。您可以使用此选项更改会话变量。此选项可从 MySQL Shell 8.0.30 获得。例如,以下语句针对实用程序在导入过程中使用的会话跳过目标 MySQL 实例上的二进制日志记录,并增加可用于创建索引的线程数:

sessionInitSQL: ["SET SESSION sql_log_bin=0;", "SET SESSION innodb_ddl_threads=8,"]

如果在运行 SQL 语句时发生错误,导入将停止并返回一条错误消息。

加载内容的选项

loadIndexes: [ true | false ]

为表创建 ( true) 或不创建 ( false) 二级索引。默认值为true。当此选项设置为 时false,二级索引不会在导入过程中创建,您必须在之后创建它们。如果您分别加载 DDL 文件和数据文件,并且如果您想在加载 DDL 文件后更改表结构,这将很有用。之后,您可以通过再次运行转储加载实用程序来创建二级索引 loadIndexesset to truedeferTableIndexesset to all

从 8.0.31 开始,MySQL Shell 使用 MySQL Server 的并行索引创建。以前,转储加载实用程序按顺序添加索引,一次一个。从这个版本开始,表中的所有索引都是同时添加的。

有关限制和配置, 请参阅 为在线 DDL 操作配置并行线程。

deferTableIndexes: [ off | fulltext | all ]

将二级索引的创建推迟到加载表数据之后。这可以减少加载时间。 off表示所有索引都是在表加载期间创建的。默认设置 fulltext仅延迟全文索引。 all推迟所有二级索引,只在表加载期间创建主索引,以及(从 MySQL Shell 8.0.22 开始)在包含自动增量值的列上定义的索引。all在 MySQL Shell 8.0.21 中,如果您有任何包含自动增量值的唯一键列 ,请不要设置。

analyzeTables: [ off | on | histogram ]

ANALYZE TABLE加载表时 执行表。on分析所有表,并histogram仅分析具有存储在转储中的直方图信息的表。默认值为off。即使数据已经加载,您也可以使用此选项运行转储加载实用程序来分析表。

showMetadata: [ true | false ]

从源实例中打印gtid_executed GTID 集和二进制日志文件名和位置,取自 MySQL Shell 的实例转储实用程序、模式转储实用程序或表转储实用程序生成的转储中包含的转储元数据。元数据以 YAML 格式打印。此选项可从 MySQL Shell 8.0.24 获得。

gtid_executedGTID 集始终作为转储文件中的字段包含在 转储中gtidExecuted@.json转储加载实用程序不会自动将 gtid_executed 源 MySQL 实例中的 GTID 集应用到目标 MySQL 实例上。要将这些 GTID 应用于目标 MySQL 实例以用于复制,请使用该 updateGtidSet选项或手动导入它们,具体取决于目标 MySQL 实例的版本。从 MySQL Shell 8.0.23 开始,这在 MySQL 数据库系统实例上受支持。有关详细信息,请参阅 updateGtidSet选项的描述。

如果用于运行转储实用程序的用户帐户具有REPLICATION CLIENT特权,则包括二进制日志文件名和位置。二进制日志文件名和位置可用于设置从未启用 GTID 且未使用基于 GTID 的复制的源服务器到已启用 GTID 的副本的复制,使用语句的 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 选项CHANGE REPLICATION SOURCE TO(这是可从 MySQL 服务器 8.0.23 获得)。

updateGtidSet: [ off | append | replace ]

gtid_executed 转储元数据中记录的源 MySQL 实例的 gtid_purgedGTID 集应用到目标 MySQL 实例上的 GTID 集。gtid_purged GTID 集包含已在服务器上应用但不存在于服务器上的任何二进制日志文件中的所有事务的 GTID。此选项可从 MySQL Shell 8.0.22 获得,但在该版本中,由于权限限制,MySQL 数据库系统不支持它。从 MySQL 8.0.23 开始,该选项也可用于 MySQL 数据库系统实例。默认值为 off,表示不应用 GTID 集。

不要将此选项用于 MySQL Shell 的表转储实用程序生成的转储,仅用于 MySQL Shell 的实例转储实用程序或模式转储实用程序生成的转储。此外,当 Group Replication 在目标 MySQL 实例上运行时,请勿使用此选项。

对于不是 MySQL DB System 实例的 MySQL 实例,当您设置appendreplace更新 GTID 集时,还要将skipBinlog选项设置为 true。这可确保源服务器上的 GTID 与目标服务器上的 GTID 匹配。对于 MySQL 数据库系统实例,不使用此选项。

对于 MySQL 8.0 中的目标 MySQL 实例,您可以将选项设置为append,这会将 gtid_executed源 MySQL 实例的 gtid_purgedGTID 集附加到目标 MySQL 实例上的 GTID 集。gtid_executed 要应用 的 GTID 集(显示在转储文件的gtidExecuted字段中 @.json)不得与gtid_executed 目标 MySQL 实例上已有的集相交。例如,当将模式从不同的源 MySQL 实例导入到已经具有来自其他源服务器的模式的目标 MySQL 实例时,您可以使用此选项。

您还可以使用replaceMySQL 8.0 中 gtid_purged的目标 MySQL 实例,将目标 MySQL 实例上设置的 GTID 替换gtid_executed为源 MySQL 实例中设置的 GTID。为此, gtid_executed来自源 MySQL 实例的 GTID 集必须是 gtid_purged 目标 MySQL 实例上 GTID 集的超集,并且不得与目标 gtid_executedGTID 集中不在其 gtid_purgedGTID 集中的事务集相交。

对于 MySQL 5.7 中的目标 MySQL 实例,将选项设置为replace,这 gtid_purged会将目标 MySQL 实例上设置的 GTID 替换gtid_executed为源 MySQL 实例中设置的 GTID。在 MySQL 5.7 中,要执行此操作,目标 MySQL 实例上的gtid_executedgtid_purged GTID 集必须为空,因此该实例必须未使用且之前没有导入 GTID 集。

在 MySQL Shell 8.0.21 中,此选项不可用,您可以在 MySQL 服务器实例上手动应用 GTID 集(使用组复制的情况除外)。对于 MySQL 数据库系统,不支持此方法。要应用 GTID 集,导入后,使用 MySQL Shell 的\sql命令(或进入 SQL 模式)在连接的 MySQL 实例上发出以下语句, 从转储元数据中的转储文件中 的字段 复制gtid_executedGTID 集 :gtidExecuted@.json

shell-js> \sql SET @@GLOBAL.gtid_purged= "+gtidExecuted_set";

此语句从 MySQL 8.0 开始运行,将源 MySQL 服务器实例的 gtid_executedGTID 集添加到目标 MySQL 实例的 gtid_purgedGTID 集。对于 MySQL 5.7,加号 ( +) 必须省略,目标 MySQL 实例上的 gtid_executedgtid_purged GTID 设置必须为空。更多详细信息,请参见 gtid_purged目标MySQL实例版本中系统变量的描述。

createInvisiblePKs: [ true | false ]

为转储中不包含主键的每个表在不可见列中添加主键。如果转储是使用MySQL Shell 的实例转储实用程序 、模式转储实用程序或表转储实用程序的选项创建的,则会自动应用该 true设置 。仅当加载转储的 DDL ( ) 时才添加主键。不可见的列(名为“ ”)对使用上传表的应用程序没有影响。 create_invisible_pksutil.dumpInstance()util.dumpSchemas()util.dumpTables()loadDdl: truemy_row_id

createInvisiblePKs从 MySQL Shell 8.0.24 开始出现,当true 设置生效时,目标 MySQL 实例必须是 MySQL Server 8.0.24 或更高版本,否则加载失败。MySQL Server 8.0.23 提供了不可见列,但该版本中对它们的限制阻止了此功能的使用。MySQL Shell 8.0.24 之前的 MySQL Shell 版本中的转储加载实用程序会自动忽略转储元数据标志并且不会添加主键,因此请确保使用最新版本的实用程序。

以这种方式添加主键还不能将修改后的表入站复制到 MySQL 数据库服务高可用性数据库系统,因为该功能目前需要主键同时存在于源服务器和副本服务器中。如果可能,请考虑在源服务器上的表中创建主键,而不是使用此选项,然后再次转储它们。从 MySQL 8.0.23 开始,您可以通过使用不可见的列来保存主键来执行此操作,而不会影响应用程序。这是性能和可用性的最佳实践,有助于转储数据库与 MySQL 数据库服务无缝协作。

MySQL 数据库服务和 Oracle 云基础设施的选项

osBucketName: "string"

转储文件所在的 Oracle Cloud Infrastructure 对象存储桶的名称。默认情况下, [DEFAULT]位于 的 Oracle Cloud Infrastructure CLI 配置文件中的配置文件 ~/.oci/config用于建立与存储桶的连接。ociConfigFile您可以使用和 ociProfile选项替换要用于连接的替代配置文件 。有关设置 CLI 配置文件的说明,请参阅 SDK 和 CLI 配置文件

osNamespace: "string"

by 命名的对象存储桶所在的 Oracle Cloud Infrastructure 命名空间osBucketName。对象存储桶的命名空间显示在 Oracle Cloud Infrastructure 控制台中桶详细信息页面的 Bucket Information 选项卡中,或者可以使用 Oracle Cloud Infrastructure 命令行界面获取。

ociConfigFile: "string"

一个 Oracle Cloud Infrastructure CLI 配置文件,其中包含用于连接的配置文件,而不是默认位置中的配置文件 ~/.oci/config

ociProfile: "string"

用于连接的 Oracle Cloud Infrastructure 配置文件的配置文件名称,而不是用于连接 [DEFAULT]的 Oracle Cloud Infrastructure CLI 配置文件中的配置文件。

S3 兼容服务的选项

MySQL Shell 支持加载存储在 S3 兼容存储桶中的转储,例如 Amazon Web Services (AWS) S3。

有关支持的服务及其配置要求的信息,请参阅 第 4.7 节“云服务配置”

s3BucketName: "string"

转储文件所在的 S3 存储桶的名称。默认情况下,default Amazon Web Services (AWS) CLI 中 的配置文件configcredentials位于的文件 ~/.aws/用于建立与 S3 存储桶的连接。s3ConfigFile您可以使用和 s3CredentialsFile选项替换连接的替代配置和凭据。有关安装和配置 AWS CLI 的说明,请参阅 AWS CLI 入门

s3CredentialsFile: "string"

包含用于连接的用户凭据的凭据文件,而不是默认位置中的凭据,~/.aws/credentials. 通常,凭据文件包含 用于连接 的aws_access_key_id和 。aws_secret_access_key

s3ConfigFile: "string"

一个 AWS CLI 配置文件,其中包含用于连接的配置文件,而不是默认位置中的配置文件~/.aws/config。通常,配置文件包含用于连接的区域和输出类型。

s3Profile: "string"

用于连接的 s3 CLI 配置文件的配置文件名称,而不是用于连接default 的 AWS CLI 配置文件中的配置文件。

s3EndpointOverride: "string"

要使用的端点的 URL 而不是默认值。

连接到 Oracle Cloud Infrastructure S3 兼容性 API 时,端点采用以下格式: . 替换为对象存储命名空间和 您的区域标识符。例如,美国东部(阿什本)区域的区域标识符是。 https://namespace.compat.objectstorage.region.oraclecloud.comnamespaceregionus-ashburn-1

对于美国东部(阿什本)区域中名为 axaxnpcrorw5 的命名空间:

https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com.

以下示例显示了从testAWS S3 存储桶中 的文件夹加载 MySQL 转储Bucket001

      util.loadDump("test",{s3BucketName: "Bucket001", threads: 4})

以下示例显示了从test对象存储桶中 的前缀 加载 MySQL 转储, Bucket001使用配置文件 将连接定向到所需租户和区域的 OCI 端点: ocis3EndpointOverride

      util.loadDump("test",{s3BucketName: "Bucket001", 
      s3EndpointOverride: "https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com", 
      s3Profile: "oci", threads: 4})

过滤选项

loadDdl: [ true | false ]

将此选项设置为false从加载中排除转储中的 DDL 文件。默认值为 true,表示加载 DDL 文件。

loadData: [ true | false ]

将此选项设置为false从加载中排除转储中的数据文件。默认值为 true,表示加载数据文件。

loadUsers: [ true | false ]

导入 ( true) 或不导入 ( false) 用户及其角色和授权到目标 MySQL 实例。默认为 false,因此默认不导入用户。跳过当前用户的语句。从 MySQL Shell 8.0.22 开始,如果用户已存在于目标 MySQL 实例中,则会返回错误,并且不会应用转储文件中的用户授权。从 MySQL Shell 8.0.22 开始,您可以使用转储加载实用程序中的 excludeUsersincludeUsers选项来指定要排除或包含在导入中的用户帐户。

笔记

root在 MySQL Shell 8.0.21 中,如果转储文件中存在用户帐户或其他受限用户帐户名称,则 尝试将用户导入 MySQL 数据库系统会导致导入失败,因此无法将 用户导入 MySQL 数据库系统在该版本中受支持。

MySQL Shell 的模式转储实用程序和表转储实用程序不包括转储中的用户、角色和授权,但实例转储实用程序可以并且默认情况下包含。从 MySQL Shell 8.0.22 开始,excludeUsersincludeUsers选项也可以在实例转储实用程序中使用,以从转储文件中排除或包含指定的用户帐户。

如果您指定true但提供的转储文件不包含用户帐户,则在 MySQL Shell 8.0.23 之前,该实用程序将返回错误并停止导入。从 MySQL Shell 8.0.23 开始,该实用程序改为返回警告并继续。

excludeUsers: array of strings

从导入中排除指定的用户帐户。此选项可从 MySQL Shell 8.0.22 获得,您可以使用它来排除不接受导入 MySQL 数据库系统、目标 MySQL 实例上已经存在或不需要的用户帐户。 为用用户名和主机名定义的帐户或 为仅用用户名定义的帐户指定格式的每个用户帐户字符串 。如果您不提供主机名,则将排除具有该用户名的所有帐户。 "'user_name'@'host_name'""'user_name'"

includeUsers: array of strings

在导入中仅包括指定的用户帐户。为 excludeUsers选项指定每个用户帐户字符串。excludeUsers此选项可从 MySQL Shell 8.0.22 获得,如果目标 MySQL 实例中只需要几个用户帐户,您可以将其用作替代方法。您还可以同时指定这两个选项以包含一些帐户并排除其他帐户。

excludeSchemas: array of strings

从导入中排除命名模式。请注意, information_schemamysqlndbinfoperformance_schemasysschemas 始终从 MySQL Shell 的实例转储实用程序创建的转储中排除。

includeSchemas: array of strings

仅加载转储文件中的命名模式。您可以指定这两个选项以包括一些模式并排除其他模式。

excludeTables: array of strings

从导入中排除指定的表,这样它们就不会上传到目标 MySQL 实例。表名必须用有效的模式名限定,并在需要时用反引号引用。请注意mysql.apply_statusmysql.general_logmysql.schema、 和 的数据mysql.slow_log tables始终不包括在由 MySQL Shell 的模式转储实用程序创建的转储中,尽管包含它们的 DDL 语句。

includeTables: array of strings

仅加载转储文件中的命名表。表名必须用有效的模式名限定,并在需要时用反引号引用。您可以指定这两个选项以包含一些表并排除其他表。

excludeEvents: array of strings

从导入中排除命名事件。此选项可从 MySQL Shell 8.0.28 获得。事件名称必须使用有效的模式名称进行限定,并在需要时用反引号字符引用。

includeEvents: array of strings

仅加载转储文件中的命名事件。此选项可从 MySQL Shell 8.0.28 获得。事件名称必须用有效的模式名称限定,并在需要时用反引号字符引用。

excludeRoutines: array of strings

从导入中排除指定的函数和存储过程。此选项可从 MySQL Shell 8.0.28 获得。例程的名称必须用有效的模式名称限定,并在需要时用反引号字符引用。

includeRoutines: array of strings

仅加载转储文件中的命名函数和存储过程。此选项可从 MySQL Shell 8.0.28 获得。例程的名称必须用有效的模式名称限定,并在需要时用反引号字符引用。

excludeTriggers: array of strings

从导入中排除命名触发器。此选项可从 MySQL Shell 8.0.28 获得。触发器的名称必须使用有效的架构名称和表名称 ( schema.table.trigger) 进行限定,并在需要时用反引号字符引用。schema.table您可以通过使用此选项 ( ) 指定架构名称和表名称来排除特定表的所有触发器。

includeTriggers: array of strings

仅加载转储文件中的命名触发器。此选项可从 MySQL Shell 8.0.28 获得。触发器的名称必须使用有效的架构名称和表名称 ( schema.table.trigger) 进行限定,并在需要时用反引号字符引用。schema.table您可以通过使用此选项 ( ) 指定架构名称和表名称来包括特定表的所有触发器。

生成隐形主键模式

MySQL Server 8.0.30 引入了 GIPK 模式, Generated Invisible Primary Keys。在这种模式下运行时,对于任何没有显式主键创建的 InnoDB 表,MySQL 服务器会自动将生成的不可见主键 (GIPK) 添加到表中。通过设置 sql_generate_invisible_primary_key 为 ON 启用此模式。

MySQL Shell 的加载实用程序选项 createInvisiblePKs使用服务器的 GIPK 模式为没有主键的表生成不可见的主键。

在某些情况下,如果用户没有足够的权限使用 GIPK 模式,MySQL Shell 可以回退到以前生成不可见主键的方法。

如果createInvisiblePKs:falsesql_generate_invisible_primary_key=OFF,则不会为从转储加载的任何表生成主键。

如果createInvisiblePKs:falsesql_generate_invisible_primary_key=ON,MySQL Shell 尝试设置 sql_generate_invisible_primary_key=OFF。如果更改成功,则不会为从转储加载的任何表生成主键。

如果createInvisiblePKs:truesql_generate_invisible_primary_key=OFF,MySQL Shell 尝试设置 sql_generate_invisible_primary_key=ON。如果更改成功,将为每个没有从转储加载主键的表生成主键。

如果createInvisiblePKs:truesql_generate_invisible_primary_key=ON,则为使用 MySQL 服务器 GIPK 模式加载的每个表生成主键。

如果运行 MySQL Shell 加载实用程序的用户没有所需的 MYSQL 服务器权限,则设置尝试 sql_generate_invisible_primary_key 失败。如果尝试失败 createInvisiblePKs:true,MySQL Shell 会为任何没有主键的表生成不可见的主键。

如果启用了 GIPK 服务器选项 sql_generate_invisible_primary_key 并禁用了 MySQL Shell 加载实用程序选项 createInvisiblePKs,并且用户没有更改所需的权限 sql_generate_invisible_primary_key,则会生成错误并且加载失败。可以通过启用 MySQL Shell 环境变量来覆盖此行为MYSQLSH_ALLOW_ALWAYS_GIPK。此环境变量覆盖 createInvisiblePKs:false,在所有加载的表上启用不可见私钥(如果 sql_generate_invisible_primary_key 启用)。

如果启用了 MySQL Shell 加载实用程序选项 createInvisiblePKs,但禁用了 GIPK 服务器选项, sql_generate_invisible_primary_key 则 MySQL Shell 会尝试启用 sql_generate_invisible_primary_key. 如果用户在目标 MySQL 服务器上具有适当的权限, sql_generate_invisible_primary_key 则启用,并且加载实用程序使用服务器的 GIPK 模式在加载的表上创建不可见的主键。如果用户没有所需的权限,例如在 MySQL 数据库服务上,MySQL Shell 会回退到以前的行为并在不使用服务器的 GIPK 模式的情况下在表上创建主键。

修改转储数据

MySQL Shell 的并行表导入实用程序 util.importTable()可以与转储加载实用程序结合使用,util.loadDump() 以便在将数据上传到目标 MySQL 实例之前修改分块输出文件中的数据。您可以通过此方法一次修改一张表的数据。请遵循此过程,该过程适用于 MySQL Shell 8.0.23:

  1. 使用带有loadDdl: trueloadData: false 选项的转储加载实用程序,仅加载 DDL 文件,并在没有数据的目标 MySQL 实例上创建选定的表。

    shell-js> util.loadDump("/mnt/data/proddump", { 
            > includeTables: ["product.pricing"], 
            > loadDdl: true, 
            > loadData: false});
  2. 使用并行表导入实用程序捕获和转换表的数据,并将其导入到目标 MySQL 实例上的空表中。在此示例中,pricing表的数据位于多个压缩文件中,这些文件是使用通配符模式匹配指定的。id转储文件中的和 列的值prodname被原封不动地分配给目标表中的相同列。price转储文件中列 的值被捕获并分配给变量@1。然后使用该decodeColumns 选项将价格降低标准数量,并将降低的价格放置在 price目标表的列。

    shell-js> util.importTable ("/mnt/data/proddump/product@pricing@*.zst", {   
            > schema: "product",  
            > table: "pricing",  
            > columns: ["id",  "prodname",  1],
            > decodeColumns: { "price": "0.8 * @1"}});
  3. 根据需要对转储文件中需要修改数据的任何其他表重复步骤 1 和 2。

  4. 完成所有需要修改的表和数据的上载后,使用转储加载实用程序为不需要修改的任何剩余表加载 DDL 和数据。请务必排除您在前面的步骤中修改过的表。

    shell-js> util.loadDump("/mnt/data/proddump", {excludeTables: ["product.pricing"]});

实用程序错误消息

53000-53999 范围内的错误编号特定于 MySQL Shell 的转储加载实用程序 util.loadDump()。可能会返回以下错误:

  • 错误编号:53000; 象征: SHERR_LOAD_MANIFEST_EXPIRED_PARS

    消息:清单文件中的 PAR 已过期,过期时间设置为:%s

  • 错误编号:53001; 象征: SHERR_LOAD_MANIFEST_PAR_MISMATCH

    消息:提供的 PAR 必须是转储位置上的文件:“%s”

  • 错误编号:53002; 象征: SHERR_LOAD_SPLITTING_DDL_FAILED

    消息:为表 %s 拆分 DDL 脚本时出错:%s

  • 错误编号:53003; 象征: SHERR_LOAD_SECONDARY_ENGINE_ERROR

    消息:表 %s 有辅助引擎集,但并非所有索引都已重新创建

  • 错误编号:53004; 象征: SHERR_LOAD_FAILED_TO_DISABLE_BINLOG

    消息:'SET sql_log_bin=0' 失败,错误:%s

  • 错误编号:53005; 象征: SHERR_LOAD_WORKER_THREAD_FATAL_ERROR

    消息:加载转储时出错

  • 错误编号:53006; 象征: SHERR_LOAD_UNSUPPORTED_DUMP_VERSION

    消息:不支持的转储版本

  • 错误编号:53007; 象征: SHERR_LOAD_UNSUPPORTED_DUMP_CAPABILITIES

    消息:不支持的转储功能

  • 错误编号:53008; 象征: SHERR_LOAD_INCOMPLETE_DUMP

    消息:转储不完整

  • 错误编号:53009; 象征: SHERR_LOAD_UNSUPPORTED_SERVER_VERSION

    消息:加载转储仅在 MySQL 5.7 或更新版本中受支持

  • 错误编号:53010; 象征: SHERR_LOAD_DUMP_NOT_MDS_COMPATIBLE

    消息:转储与 MDS 不兼容

  • 错误编号:53011; 象征: SHERR_LOAD_SERVER_VERSION_MISMATCH

    消息:MySQL 版本不匹配

  • 错误编号:53012; 象征: SHERR_LOAD_UPDATE_GTID_GR_IS_RUNNING

    消息:updateGtidSet 选项不能在运行组复制的服务器上使用。

  • 错误编号:53013; 象征: SHERR_LOAD_UPDATE_GTID_APPEND_NOT_SUPPORTED

    消息:目标 MySQL 服务器不支持 updateGtidSet:'append'。

  • 错误编号:53014; 象征: SHERR_LOAD_UPDATE_GTID_REQUIRES_SKIP_BINLOG

    消息:仅当启用 skipBinlog 选项时,才能使用 MySQL 5.7 目标服务器上的 updateGtidSet 选项。

  • 错误编号:53015; 象征: SHERR_LOAD_UPDATE_GTID_REPLACE_REQUIRES_EMPTY_VARIABLES

    消息:仅当 GTID_PURGED 和 GTID_EXECUTED 为空时,updateGtidSet:'replace' 选项才可用于目标服务器版本,但它们不是。

  • 错误编号:53016; 象征: SHERR_LOAD_UPDATE_GTID_REPLACE_SETS_INTERSECT

    消息:仅当目标服务器上的 gtid_subtract(gtid_executed,gtid_purged) 与转储的 GTID 集不相交时,才能使用 updateGtidSet:'replace' 选项。

  • 错误编号:53017; 象征: SHERR_LOAD_UPDATE_GTID_REPLACE_REQUIRES_SUPERSET

    消息:仅当转储的 GTID 集是目标服务器上 gtid_purged 当前值的超集时,才能使用 updateGtidSet:'replace' 选项。

  • 错误编号:53018; 象征: SHERR_LOAD_UPDATE_GTID_APPEND_SETS_INTERSECT

    消息:仅当目标服务器上的 gtid_executed 与转储的 GTID 集不相交时,才能使用 updateGtidSet:'append' 选项。

  • 错误编号:53019; 象征: SHERR_LOAD_INVISIBLE_PKS_UNSUPPORTED_SERVER_VERSION

    消息:“createInvisiblePKs”选项需要服务器 8.0.24 或更新版本。

  • 错误编号:53020; 象征: SHERR_LOAD_REQUIRE_PRIMARY_KEY_ENABLED

    消息:在目标服务器上启用了 sql_require_primary_key

  • 错误编号:53021; 象征: SHERR_LOAD_DUPLICATE_OBJECTS_FOUND

    消息:在目标数据库中找到重复对象

  • 错误编号:53022; 象征: SHERR_LOAD_DUMP_WAIT_TIMEOUT

    消息:转储超时

  • 错误编号:53023; 象征: SHERR_LOAD_INVALID_METADATA_FILE

    消息:无效的元数据文件 %s

  • 错误编号:53024; 象征: SHERR_LOAD_PARSING_METADATA_FILE_FAILED

    消息:无法解析元数据文件 %s:%s

  • 错误编号:53025; 象征: SHERR_LOAD_LOCAL_INFILE_DISABLED

    消息:local_infile 在服务器中被禁用

  • 错误编号:53026; 象征: SHERR_LOAD_PROGRESS_FILE_ERROR

    消息:加载加载进度文件“%s”时出错:%s

  • 错误编号:53027; 象征: SHERR_LOAD_PROGRESS_FILE_UUID_MISMATCH

    消息:为具有 UUID %s 的服务器创建了进度文件,而目标服务器具有 UUID:%s

  • 错误编号:53028; 象征: SHERR_LOAD_MANIFEST_UNKNOWN_OBJECT

    消息:清单中的未知对象:%s

54000-54999 范围内的错误号表示 MySQL Shell 的转储加载实用程序util.loadDump()或 MySQL Shell 的实例转储实用程序util.dumpInstance()、模式转储实用程序util.dumpSchemas()和表转储实用程序遇到的连接和网络错误util.dumpTables()。在大多数情况下,错误代码与所涉及的 HTTP 错误相匹配——例如,错误 54404 发生在未找到 URL 的目标时(HTTP 404 Not Found)。可能会返回以下错误:

  • 错误编号:54000; 象征: SHERR_DL_COMMON_CONNECTION_ERROR

    消息:%s连接错误:%s。

  • 错误编号:5410054511;象征: SHERR_NETWORK_[HTTP error name]

    消息:特定于上下文的消息