MySQL Shell 9.0  /  MySQL Shell 实用程序  /  实例转储工具、模式转储工具和表转储工具

11.5 实例转储工具、模式转储工具和表转储工具

MySQL Shell 的实例转储工具 util.dumpInstance() 和模式转储工具 util.dumpSchemas(),支持将所有模式或选定模式从本地 MySQL 实例导出到 Oracle Cloud Infrastructure 对象存储桶或一组本地文件。表转储工具 util.dumpTables() 支持对模式中选定的表或视图执行相同的操作。然后可以使用 util.loadDump() 工具(参见 第 11.6 节,“转储加载工具”)将导出的项目导入 HeatWave Service DB 系统或 MySQL 服务器实例。为了获得最佳功能,请始终使用最新版本的 MySQL Shell 转储工具和转储加载工具。

关于实用程序

MySQL Shell 的实例转储工具、模式转储工具和表转储工具提供 Oracle Cloud Infrastructure 对象存储流式传输、HeatWave Service 兼容性检查和修改、使用多个线程的并行转储以及文件压缩,这些功能是 mysqldump 没有提供的。转储期间会显示进度信息。您可以使用您选择的转储选项集执行一次试运行,以显示将执行哪些操作、将转储哪些项目以及(对于实例转储工具和模式转储工具)运行实用程序时需要修复哪些 HeatWave Service 兼容性问题,当您实际使用这些选项运行实用程序时。

在选择转储文件的目标时,请注意,要导入到 HeatWave Service DB 系统,您运行转储加载工具的 MySQL Shell 实例必须安装在具有对 HeatWave Service DB 系统的访问权限的 Oracle Cloud Infrastructure 计算实例上。如果您将实例、模式或表转储到对象存储桶,则可以从计算实例访问对象存储桶。如果您在本地系统上创建转储文件,则需要使用您选择的复制工具(取决于您为计算实例选择的操作系统)将它们传输到 Oracle Cloud Infrastructure 计算实例。

MySQL Shell 的实例转储工具、模式转储工具和表转储工具创建的转储包含指定模式结构的 DDL 文件,以及包含数据的制表符分隔的 .tsv 文件。如果您希望将导出的模式作为与使用导出的数据填充它分离的步骤进行设置,您也可以选择仅生成 DDL 文件或仅生成数据文件。您可以选择是否在转储期间锁定实例以进行备份,以确保数据一致性。默认情况下,转储工具会将表数据分成多个数据文件,并压缩文件。

您可以使用实用程序的选项来包含或排除指定的模式和表、用户及其角色和授权、事件、例程和触发器。如果您指定了冲突的包含和排除选项,或者命名了未包含在转储中的对象,则会报告错误,并且转储停止,以便您可以更正选项。如果您需要转储 MySQL 实例中的大多数模式,作为另一种策略,您可以使用实例转储工具而不是模式转储工具,并指定 excludeSchemas 选项来列出不应转储的那些模式。类似地,如果您需要转储模式中的大多数表,您可以使用带有 excludeTables 选项的模式转储工具,而不是表转储工具。

对于 mysql.apply_statusmysql.general_logmysql.schemamysql.slow_log 表的数据始终从 MySQL Shell 的模式转储工具创建的转储中排除,尽管它们的 DDL 语句已包含在内。始终从实例转储中排除 information_schemamysqlndbinfoperformance_schemasys 模式。

默认情况下,时区在转储输出中所有时间戳数据中都标准化为 UTC,这有助于在具有不同时区的服务器之间移动数据以及处理具有多个时区的数据。如果您愿意,可以使用 tzUtc: false 选项保留原始时间戳。

MySQL Shell 转储加载工具 util.loadDump() 支持使用预先验证的请求 (PAR) 从对象存储桶加载导出的实例和模式。有关使用 PAR 加载转储的信息,请参见 第 11.6 节,“转储加载工具”

MySQL Shell 的实例转储工具、模式转储工具和表转储工具是分区感知的(参见 分区,在 MySQL 手册 中)。当转储的表被分区时,每个分区都被视为一个独立的表;如果表有子分区,则每个子分区都被视为一个独立的表。这也意味着,当启用分块时,分区的或子分区的表的每个分区或子分区都会独立分块。为分区的表创建的转储文件的基名使用格式 schema@table@partition,其中 schematable 分别是父模式和表的名称,而 partition 是分区或子分区的 URL 编码名称。

为了管理对早期版本的 MySQL Shell 工具不支持的功能的添加,util.dumpInstance()util.dumpSchemas()util.dumpTables()util.loadDump() 将创建转储时使用的功能列表写入转储元数据文件;对于每个这样的功能,都会在列表中添加一个元素。当转储加载工具读取元数据文件并发现列出的不受支持的功能时,它会报告错误;错误消息包含支持该功能的 MySQL Shell 版本。

要求和限制

  • 实例转储工具、模式转储工具和表转储工具仅支持 MySQL 服务器版本的通用可用性 (GA) 版本。

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

  • 对于源 MySQL 实例,在所有提供实用程序的 MySQL Shell 版本中,都完全支持从 MySQL 5.7 或更高版本转储。

  • 实例或模式中的对象名称必须使用 latin1utf8 字符集。

  • 仅保证使用 InnoDB 存储引擎的表的数据一致性。

  • 用于运行实用程序的用户帐户在所有涉及的模式上必须具有的最低特权集如下:EVENTRELOADSELECTSHOW VIEWTRIGGER.

    • 如果 consistent 选项设置为 true(默认值),则所有转储表的 LOCK TABLES 特权可以代替 RELOAD 特权(如果后者不可用)。

    • 如果用户帐户没有 BACKUP_ADMIN 特权,并且无法执行 LOCK INSTANCE FOR BACKUP,则实用程序在转储期间会进行额外的一致性检查。如果此检查失败,则实例转储会停止,但模式转储或表转储会继续并返回错误消息,以提醒用户一致性检查失败。

    • 如果 consistent 选项设置为 false,则不需要 BACKUP_ADMINRELOAD 特权。

    • 如果转储来自 MySQL 5.6 实例,并且包含用户帐户(这只有实例转储工具才能实现),则还需要 SUPER 特权。

  • 用于运行实用程序的用户帐户需要 REPLICATION CLIENT 特权,以便实用程序能够在转储元数据中包含二进制日志文件名和位置。如果用户 ID 没有该特权,则转储会继续,但不包含二进制日志信息。在将转储的数据加载到副本服务器后,可以使用二进制日志信息来设置与非 GTID 源服务器的复制,使用 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 选项的 CHANGE REPLICATION SOURCE TO 语句。

  • 用于将文件传输到 Oracle 云基础设施对象存储桶的上传方法的单个文件大小限制为 1.2 TiB。

  • 实用程序会将数据类型不安全以文本形式存储的列(例如 BLOB)转换为 Base64。因此,这些列的大小不得超过目标 MySQL 实例上配置的 max_allowed_packet 系统变量值(以字节为单位)的约 0.74 倍。

  • 对于表转储实用程序,导出的视图和触发器不得使用限定名称引用其他视图或表。

  • 表转储实用程序不转储例程,因此转储对象引用的任何例程(例如,使用函数的视图)在加载转储时必须已存在。

  • 为了导入 HeatWave Service DB 系统,将 ocimds 选项设置为 true,以确保与 HeatWave Service 兼容。

    重要

    迁移到 HeatWave Service 时,建议始终使用最新的可用 MySQL Shell 版本。

  • 为了与 HeatWave Service 兼容,所有表都必须使用 InnoDB 存储引擎。 ocimds 选项会检查转储中发现的任何异常,并且 compatibility 选项会修改转储文件以将其他存储引擎替换为 InnoDB

  • 对于实例转储实用程序和模式转储实用程序,为了与 HeatWave Service 兼容,实例或模式中的所有表都必须位于 MySQL 数据目录中,并且必须使用默认模式加密。 ocimds 选项会修改转储文件以应用这些要求。

  • HeatWave Service 使用 partial_revokes=ON,这意味着包含通配符(例如 _%)的模式上的数据库级用户授权将被报告为错误。

    您还可以使用兼容性选项 ignore_wildcard_grantsstrip_invalid_grants

    有关更多信息,请参阅 HeatWave Service 和 Oracle 云基础设施的选项

  • 为了与 HeatWave Service 兼容,表空间和权限等项目的其他安全限制和要求适用于。 ocimds 选项会检查转储过程中发现的任何异常,并且 compatibility 选项会自动修改转储文件以解决一些兼容性问题。您可能需要(或希望)手动进行一些更改。有关更多详细信息,请参阅 compatibility 选项的描述。

  • 对于使用组复制的 HeatWave Service 高可用性,每个表都需要主键。 ocimds 选项会检查转储中缺少主键的任何表,并报告错误。如果您不需要主键,可以将 compatibility 选项设置为忽略缺少的主键,或者通知 MySQL Shell 的转储加载实用程序在不存在主键的位置添加不可见列中的主键。有关详细信息,请参阅 compatibility 选项的描述。如果可能,请考虑在再次转储之前在源服务器上的表中创建主键,而不是在实用程序中管理它。

  • 如果任何转储实用程序都针对 MySQL 5.7 运行,并且 "ocimds": true,则 util.checkForServerUpgrade 会自动运行,除非这些检查被 skipUpgradeChecks 禁用。升级前检查根据转储中包含的对象类型运行。

运行实用程序

实例转储实用程序、模式转储实用程序和表转储实用程序使用 MySQL Shell 全局会话从执行导出操作的目标 MySQL 服务器获取连接详细信息。在运行任何一个实用程序之前,您必须打开全局会话(它可以具有 X 协议连接或经典 MySQL 协议连接)。实用程序为每个线程打开自己的会话,从全局会话复制连接压缩和 SSL 选项等选项,并且不再使用全局会话。

在 MySQL Shell API 中,实例转储实用程序、模式转储实用程序和表转储实用程序是 util 全局对象的函数,并具有以下签名

util.dumpInstance(outputUrl[, options]) 
util.dumpSchemas(schemas, outputUrl[, options])
util.dumpTables(schema, tables, outputUrl[, options])

options 是一个选项字典,如果为空可以省略。实例转储实用程序、模式转储实用程序和表转储实用程序的可用选项列在本主题中剩余部分。

对于模式转储实用程序,schemas 指定要从 MySQL 实例转储的一个或多个模式的列表。

对于表转储实用程序,schema 指定包含要转储项目的模式,而 tables 是一个字符串数组,指定要转储的表或视图。表转储包含在目标 MySQL 实例中设置指定模式所需的信息,尽管它可以使用转储加载实用程序的 schema 选项加载到备用目标模式中。

表转储实用程序可用于从模式中选择单个表,例如,如果您要将表在模式之间传输。在此示例中,在 MySQL Shell 的 JavaScript 模式下,hr 模式中的 employeessalaries 表被导出到本地目录 emp,该目录由实用程序在当前工作目录中创建

shell-js> util.dumpTables("hr", [ "employees", "salaries" ], "emp")

要转储指定模式中的所有视图和表,请使用 all 选项并将 tables 参数设置为一个空数组,如以下示例所示

shell-js> util.dumpTables("hr", [], "emp", { "all": true })

如果转储到本地文件系统,outputUrl 是一个字符串,指定要放置转储文件的本地目录的路径。您可以指定一个绝对路径或一个相对于当前工作目录的路径。您可以在本地目录路径之前加上 file:// 模式。在此示例中,连接的 MySQL 实例被转储到本地目录,并且在转储文件中进行了一些修改以确保与 HeatWave Service 兼容。用户首先执行一个干运行以检查模式并查看兼容性问题,然后运行转储并将相应的兼容性选项应用于解决问题

shell-js> util.dumpInstance("C:/Users/hanna/worlddump", {dryRun: true, ocimds: true})
Checking for compatibility with HeatWave Service 8.0.33
...
Compatibility issues with HeatWave Service 8.0.33 were found. Please use the 
'compatibility' option to apply compatibility adaptations to the dumped DDL.
Util.dumpInstance: Compatibility issues were found (RuntimeError)
shell-js> util.dumpInstance("C:/Users/hanna/worlddump", {
        > ocimds: true, compatibility: ["strip_definers", "strip_restricted_grants"]})

导出之前,目标目录必须为空。如果该目录在其父目录中尚不存在,则实用程序会创建它。对于导出到本地目录,在转储过程中创建的目录将使用访问权限 rwxr-x--- 创建,文件将使用访问权限 rw-r----- 创建(在支持这些权限的操作系统上)。文件和目录的所有者是运行 MySQL Shell 的用户帐户。

如果转储到 Oracle 云基础设施对象存储桶,outputUrl 是一个路径,将用于在存储桶中为转储文件添加前缀,以模拟目录结构。使用 osBucketName 选项提供对象存储桶的名称,使用 osNamespace 选项标识存储桶的命名空间。在此示例中,用户将连接的 MySQL 实例中的 world 模式转储到对象存储桶,并进行与上一个示例相同的兼容性修改

shell-js> util.dumpSchemas(["world"], "worlddump", {
        > "osBucketName": "hanna-bucket", "osNamespace": "idx28w1ckztq", 
        > "ocimds": "true", "compatibility": ["strip_definers", "strip_restricted_grants"]})

在对象存储桶中,所有转储文件都将显示 worlddump 前缀,例如

worlddump/@.done.json	
worlddump/@.json	
worlddump/@.post.sql
worlddump/@.sql
worlddump/world.json	
worlddump/world.sql	
worlddump/[email protected]	
worlddump/[email protected]	
worlddump/world@city@@0.tsv.zst
worlddump/world@city@@0.tsv.zst.idx
...

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

转储控制的选项

dryRun: [ true | false ]

显示有关使用指定选项集将要转储的内容以及 HeatWave Service 兼容性检查结果的信息(如果指定了 ocimds 选项),但不进行转储。设置此选项可以使您在开始转储之前列出所有兼容性问题。默认值为 false

showProgress: [ true | false ]

显示 (true) 或隐藏 (false) 转储的进度信息。如果 stdout 是一个终端 (tty)(例如,当 MySQL Shell 处于交互模式时),默认值为 true,否则为 false。进度信息包括要转储的估计总行数、已转储的行数、完成百分比以及每秒的吞吐量(以行和字节为单位)。

threads: int

用于从 MySQL 实例转储数据块的并行线程数。每个线程都与 MySQL 实例建立单独的连接。默认值为 4。

maxRate: "string"

转储期间数据读取吞吐量的每个线程的每秒最大字节数。可以使用单位后缀 k(千字节)、M(兆字节)和 G(吉字节)(例如,设置 100M 会将吞吐量限制为每个线程每秒 100 兆字节)。设置 0(这是默认值)或将选项设置为一个空字符串表示没有设置限制。

defaultCharacterSet: "string"

在 MySQL Shell 打开与服务器建立的会话连接以进行转储期间要使用的字符集。默认值为 utf8mb4。系统变量 character_set_clientcharacter_set_connectioncharacter_set_results 的会话值针对每个连接都设置为此值。该字符集必须受 character_set_client 系统变量的允许,并且受 MySQL 实例的支持。

consistent: [ true | false ]

通过在转储期间锁定实例以进行备份来启用 (true) 或禁用 (false) 一致数据转储。默认值为 true

当设置 true 时,实用程序会使用 FLUSH TABLES WITH READ LOCK 语句设置全局读锁定(如果用于运行实用程序的用户 ID 具有 RELOAD 权限),或者使用 LOCK TABLES 语句设置一系列表锁定(如果用户 ID 不具有 RELOAD 权限,但具有 LOCK TABLES 权限)。每个线程的事务将使用语句 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READSTART TRANSACTION WITH CONSISTENT SNAPSHOT 启动。当所有线程都启动其事务后,实例将被锁定以进行备份(如 LOCK INSTANCE FOR BACKUP 和 UNLOCK INSTANCE 语句 中所述),并且全局读锁定将被释放。

如果用户帐户没有 BACKUP_ADMIN 特权,并且无法执行 LOCK INSTANCE FOR BACKUP,则实用程序在转储期间会进行额外的一致性检查。如果此检查失败,则实例转储会停止,但模式转储或表转储会继续并返回错误消息,以提醒用户一致性检查失败。

skipConsistencyChecks: [ true | false ]

启用 (true) 或禁用 (false) 在 consistent: true 时执行的额外一致性检查。默认值为 false

如果 consistent: false,则忽略此选项。

skipUpgradeChecks: [true | false]

默认值为 false。启用该选项将禁用在 ocimds: true 时默认情况下运行的升级检查。将不会检查与 MySQL 版本升级相关的兼容性问题。仅在单独执行升级检查器时使用此选项。

转储输出选项

tzUtc: [ true | false ]

在转储的开头包含一个语句,将时区设置为 UTC。转储输出中的所有时间戳数据都将转换为此时区。默认值为 true,因此时间戳数据默认情况下会被转换。将时区设置为 UTC 有助于在具有不同时区的服务器之间移动数据,或处理具有多个时区的数据集。如果需要保留原始时间戳,请将此选项设置为 false

compression: "string;level=n"

创建转储文件时使用的压缩类型和压缩级别。以下压缩选项可用

  • none:不应用压缩。

  • gzip:使用 gzip 压缩库。压缩级别可以设置为 0 到 9。默认压缩级别为 1。例如

                      "compression": "gzip;level=4"
  • zstd:默认。使用 zstd 压缩库。压缩级别可以设置为 1 到 22。默认压缩级别为 1。例如

                      "compression": "zstd;level=15"
checksum: [ true | false ]

如果启用,将使用转储生成一个元数据文件,@.checksums.json。此文件包含转储的校验和数据,允许在加载转储时进行数据验证。请参阅 加载控制选项

如果 checksum: true,则适用以下条件

  • 如果 ddlOnly:falsechunking:true,则为每个转储的表和分区块生成校验和。

  • 如果 ddlOnly:falsechunking:false,则为每个转储的表和表分区生成校验和。

  • 如果 ddlOnly:true,则为每个转储的表和表分区生成校验和。

chunking: [ true | false ]

启用 (true) 或禁用 (false) 表数据的块化,将每个表的 data 分割成多个文件。默认值为 true,因此默认情况下启用块化。使用 bytesPerChunk 指定块大小。如果将块化选项设置为 false,则不会进行块化,工具将为每个表创建一个 data 文件。

如果表没有主键或唯一索引,则根据表中的行数、平均行长度和 bytesPerChunk 值进行块化。

bytesPerChunk: "string"

设置块化启用时写入每个 data 文件的大致字节数。可以使用单位后缀 k 表示千字节、M 表示兆字节和 G 表示吉字节。默认值为 64 MB。指定此选项会隐式地将 chunking 设置为 true。工具的目标是将每个表的 data 块化成文件,每个文件在应用压缩之前都包含此数量的数据。块大小是平均值,它是根据表统计信息和解释计划估计计算得出的。

dialect: [default|csv|csv-unix|tsv]

为导出 data 文件的格式指定一组字段和行处理选项。您可以使用所选方言作为基础进行进一步自定义,方法是还指定一个或多个 linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedfieldsEscapedBy 选项来更改设置。

默认方言会生成一个 data 文件,其内容与使用具有该语句默认设置的 SELECT...INTO OUTFILE 语句创建的文件相同。.txt 是为这些输出文件分配的适当文件扩展名。其他方言可用于导出适用于 DOS 或 UNIX 系统的 CSV 文件 (.csv) 和 TSV 文件 (.tsv)。

为每个方言应用的设置如下

表 11.3 表导出工具的方言设置

dialect

linesTerminatedBy

fieldsTerminatedBy

fieldsEnclosedBy

fieldsOptionallyEnclosed

fieldsEscapedBy

default

[LF]

[TAB]

[empty]

false

\

csv

[CR][LF]

,

''

true

\

csv-unix

[LF]

,

''

false

\

tsv

[CR][LF]

[TAB]

''

true

\


注意
  1. 方言的回车和换行符值与操作系统无关。

  2. 如果使用 linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedfieldsEscapedBy 选项,则根据命令解释器的转义约定,如果在选项值中使用反斜杠字符 (\),则可能需要将其加倍。

  3. 与具有 SELECT...INTO OUTFILE 语句的 MySQL 服务器类似,MySQL Shell 不会验证您指定的字段和行处理选项。对这些选项的不正确选择会导致数据部分或错误地导出。在开始导出之前始终验证您的设置,并在之后验证结果。

linesTerminatedBy: "characters"

工具用于终止导出 data 文件中每一行的一个或多个字符(或空字符串)。默认值为指定方言的默认值,或者如果省略方言选项,则为换行符 (\n)。此选项等效于 SELECT...INTO OUTFILE 语句的 LINES TERMINATED BY 选项。请注意,工具没有提供 SELECT...INTO OUTFILE 语句的 LINES STARTING BY 选项的等效项,该选项设置为空字符串。

fieldsTerminatedBy: "characters"

工具用于终止导出 data 文件中每个字段的一个或多个字符(或空字符串)。默认值为指定方言的默认值,或者如果省略方言选项,则为制表符 (\t)。此选项等效于 SELECT...INTO OUTFILE 语句的 FIELDS TERMINATED BY 选项。

fieldsEnclosedBy: "character"

工具用于包围导出 data 文件中每个字段的单个字符(或空字符串)。默认值为指定方言的默认值,或者如果省略方言选项,则为空字符串。此选项等效于 SELECT...INTO OUTFILE 语句的 FIELDS ENCLOSED BY 选项。

fieldsOptionallyEnclosed: [ true | false ]

是否将为 fieldsEnclosedBy 指定的字符用于包围导出 data 文件中的所有字段 (false),还是仅在字段具有字符串 data 类型(如 CHARBINARYTEXTENUM)时才包围 (true)。默认值为指定方言的默认值,或者如果省略方言选项,则为 false。此选项使 fieldsEnclosedBy 选项等效于 SELECT...INTO OUTFILE 语句的 FIELDS OPTIONALLY ENCLOSED BY 选项。

fieldsEscapedBy: "character"

用于在导出 data 文件中开始转义序列的字符。默认值为指定方言的默认值,或者如果省略方言选项,则为反斜杠 (\)。此选项等效于 SELECT...INTO OUTFILE 语句的 FIELDS ESCAPED BY 选项。如果将此选项设置为空字符串,则不会转义任何字符,这是不推荐的,因为 SELECT...INTO OUTFILE 使用的特殊字符必须进行转义。

过滤选项

where

一个键值对,包含一个有效的表标识符(格式为 schemaName.tableName)和一个有效的 SQL 条件表达式,用于过滤要导出的数据。

注意

仅在执行 SQL 时才对其进行验证。如果您要导出多个表,则任何与 SQL 语法相关的错误都只能在流程后期才能看到。因此,建议您在长运行的导出流程中使用 SQL 条件之前对其进行测试。

在以下示例中,where 仅导出 sakila.actorsakila.actor_info 表中 actor_id 值大于 150 的行,并将它们导出到名为 out 的本地文件夹

 util.dumpTables("sakila", ["actor","actor_info"], "out", {"where" : 
   {"sakila.actor": "actor_id > 150", "sakila.actor_info": "actor_id > 150"}})
partitions: {schemaName.tableName: ["string","string",..]}

一个有效的分区名称列表,将导出限制为指定的分区。

例如,要仅导出 schema.table 表中名为 p1p2 的分区:partitions: {schema.table:["p1", "p2"]}

以下示例从 table1 导出分区 p1 和 p2,从 table2 导出分区 p2

              util.dumpTables("schema", ["table","table2"], "out", {"partitions" : 
              { "schema.table1":  ["p1", "p2"],"schema.table2":  ["p1"]}})
ddlOnly: [ true | false ]

将此选项设置为 true 将仅在转储中包含转储项的 DDL 文件,而不会转储 data。默认值为 false

dataOnly: [ true | false ]

将此选项设置为 true 将仅在转储中包含转储项的 data 文件,而不会包含 DDL 文件。默认值为 false

users: [ true | false ]

(仅实例转储工具) 在转储中包含 (true) 或排除 (false) 用户及其角色和授权。默认值为 true,因此默认情况下包含用户。schema 转储工具和表转储工具不会在转储中包含用户、角色和授权。

您可以使用 excludeUsersincludeUsers 选项指定要从转储文件中排除或包含的单个用户帐户。这些选项也可与 MySQL Shell 的转储加载工具 util.loadDump() 一起使用,以根据目标 MySQL 实例的要求,在导入时排除或包含单个用户帐户。

注意

如果从 MySQL 5.6 实例转储用户,执行复制的用户必须具有 SUPER 权限。

excludeUsers: array of strings

(仅实例转储工具) 从转储文件中排除名为的用户帐户。您可以使用它来排除无法导入到 HeatWave 服务 DB 系统的用户帐户,或者已经存在或在目标 MySQL 实例上不需要的用户帐户。为定义了用户名和主机名的帐户以 "'user_name'@'host_name'" 的格式指定每个用户帐户字符串,或者为仅定义了用户名的帐户以 "'user_name'" 的格式指定每个用户帐户字符串。如果您没有提供主机名,则将排除所有具有该用户名的帐户。

includeUsers: array of strings

(仅实例转储实用程序) 仅在转储文件中包含命名用户帐户。指定每个用户帐户字符串,如 excludeUsers 选项。如果转储中只需要少数用户帐户,此选项是 excludeUsers 的替代方案。您还可以指定这两个选项来包含某些帐户并排除其他帐户。

excludeSchemas: 字符串数组

(仅实例转储实用程序) 从转储中排除命名架构。请注意,information_schemamysqlndbinfoperformance_schemasys 架构始终从实例转储中排除。

includeSchemas: 字符串数组

(仅实例转储实用程序) 仅包含转储中的命名架构。您不能通过在此选项中命名来包含 information_schemamysqlndbinfoperformance_schemasys 架构。如果您想转储一个或多个这些架构,可以使用架构转储实用程序 util.dumpSchemas() 来执行此操作。

excludeTables: 字符串数组

(实例转储实用程序和架构转储实用程序) 从转储中排除命名表。表名必须使用有效的架构名称限定,并在需要时用反引号引起来。通过 excludeTables 选项命名的表在转储中没有 DDL 文件或数据文件。请注意,mysql.apply_statusmysql.general_logmysql.schemamysql.slow_log 表 的数据始终从架构转储中排除,尽管它们的 DDL 语句包含在内,您也不能通过在另一个选项或实用程序中命名表来包含该数据。

注意

包含多字节字符的架构和表名必须用反引号括起来。

includeTables: 字符串数组

(实例转储实用程序和架构转储实用程序) 仅包含转储中的命名表。表名必须使用有效的架构名称限定,并在需要时用反引号引起来。

注意

包含多字节字符的架构和表名必须用反引号括起来。

events: [ true | false ]

(实例转储实用程序和架构转储实用程序) 包含 (true) 或排除 (false) 转储中每个架构的事件。默认值为 true

excludeEvents: 字符串数组

(实例转储实用程序和架构转储实用程序) 从转储中排除命名事件。事件名称必须使用有效的架构名称限定,并在需要时用反引号引起来。

includeEvents: 字符串数组

(实例转储实用程序和架构转储实用程序) 仅包含转储中的命名事件。事件名称必须使用有效的架构名称限定,并在需要时用反引号引起来。

routines: [ true | false ]

(实例转储实用程序和架构转储实用程序) 包含 (true) 或排除 (false) 转储中每个架构的函数和存储过程。默认值为 true。请注意,即使 routines 设置为 true,也不会包含用户定义的函数。

excludeRoutines: 字符串数组

(实例转储实用程序和架构转储实用程序) 从转储中排除命名函数和存储过程。例程名称必须使用有效的架构名称限定,并在需要时用反引号引起来。

includeRoutines: 字符串数组

(实例转储实用程序和架构转储实用程序) 仅包含转储中的命名函数和存储过程。例程名称必须使用有效的架构名称限定,并在需要时用反引号引起来。

all: [ true | false ]

(表转储实用程序) 将此选项设置为 true 会在转储中包含指定架构的所有视图和表。默认值为 false。当您使用此选项时,将 tables 参数设置为一个空数组,例如

shell-js> util.dumpTables("hr", [], "emp", { "all": true })
triggers: [ true | false ]

(所有转储实用程序) 包含 (true) 或排除 (false) 转储中每个表的触发器。默认值为 true

excludeTriggers: 字符串数组

(所有转储实用程序) 从转储中排除命名触发器。触发器名称必须使用有效的架构名称和表名 (schema.table.trigger) 限定,并在需要时用反引号引起来。您可以通过使用此选项 (schema.table) 指定架构名称和表名来排除特定表的全部触发器。

includeTriggers: 字符串数组

(所有转储实用程序) 仅包含转储中的命名触发器。触发器名称必须使用有效的架构名称和表名 (schema.table.trigger) 限定,并在需要时用反引号引起来。您可以通过使用此选项 (schema.table) 指定架构名称和表名来包含特定表的全部触发器。

HeatWave 服务和 Oracle Cloud Infrastructure 的选项

osBucketName: "字符串"

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

osNamespace: "字符串"

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

ociConfigFile: "字符串"

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

ociProfile: "字符串"

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

ociAuth: "字符串"

连接到 Oracle Cloud Infrastructure 时要使用的身份验证方法。此选项要求 osBucketName 使用有效的值进行配置。

以下选项可用

ocimds: [ true | false ]

将此选项设置为 true 会启用与 HeatWave 服务兼容性的检查和修改。默认值为 false

重要

迁移到 HeatWave Service 时,建议始终使用最新的可用 MySQL Shell 版本。

当此选项设置为 true 时,CREATE TABLE 语句中的 DATA DIRECTORYINDEX DIRECTORYENCRYPTION 选项会在 DDL 文件中被注释掉,以确保所有表都位于 MySQL 数据目录中并使用默认架构加密。会对 CREATE TABLE 语句中除 InnoDB 之外的任何存储引擎进行检查,以及对授予用户或角色的不适合权限进行检查,以及对其他兼容性问题进行检查。如果发现任何不符合的 SQL 语句,则会引发异常并停止转储。使用 dryRun 选项在转储过程开始之前列出转储中项目的所有问题。使用 compatibility 选项自动修复转储输出中的问题。

此选项默认情况下设置为 false,只有在显式设置为 true 时才会启用。

注意

如果任何转储实用程序在 MySQL 5.7 上运行,并且 "ocimds": true,则会自动运行 util.checkForServerUpgrade。根据转储中包含的对象类型运行升级前检查。

targetVersion: n.n.n

定义目标 MySQL 实例的版本,格式为 n.n.n。例如,8.1.0。如果未设置该值,则使用 MySQL Shell 版本。

兼容性检查会根据 targetVersion 的值进行调整。

compatibility: 字符串数组

对转储输出中的所有表应用与 HeatWave 服务兼容性的指定要求,根据需要更改转储文件。

以下修改可以指定为字符串数组

force_innodb

CREATE TABLE 语句更改为对任何尚未使用它的表使用 InnoDB 存储引擎。

skip_invalid_accounts

删除使用 HeatWave 服务不支持的外部身份验证插件创建的用户帐户。此选项还会删除未设置密码的用户帐户,但会识别为角色的无密码帐户除外,在这种情况下,它将使用 CREATE ROLE 语句进行转储。

strip_definers
注意

如果目标 HeatWave 服务实例的版本为 8.2.0 或更高版本,则不需要此选项。

从 MySQL Server 8.2.0 开始,SET_USER_ID 已被弃用,将在未来的版本中被移除。 SET_USER_IDSET_ANY_DEFINERALLOW_NONEXISTENT_DEFINER 替代。此更改会影响 MySQL Shell 处理用于 HeatWave Service (ocimds: true) 的转储的方式,因为管理员用户具有 SET_ANY_DEFINER 权限,并且能够使用 DEFINER 子句执行语句。这在以前的版本中是不可能的。

从视图、例程、事件和触发器中删除 DEFINER 子句,以便使用默认定义者(调用架构的用户)创建这些对象,并将视图和例程的 SQL SECURITY 子句更改为指定 INVOKER 而不是 DEFINER。HeatWave Service 需要特殊权限才能使用与加载架构的用户不同的定义者创建这些对象。如果您的安全模型要求视图和例程比查询或调用它们的帐户具有更多权限,则必须在加载架构之前手动修改架构。

strip_restricted_grants

GRANT 语句中删除 HeatWave Service 限制的特定权限,因此用户及其角色无法获得这些权限(这会导致用户创建失败)。如果 Oracle Cloud Infrastructure 计算实例上的管理用户帐户本身没有相关权限,此选项还会删除系统架构 (mysqlsys) 的 REVOKE 语句,因此无法删除它们。

strip_tablespaces

CREATE TABLE 语句中删除 TABLESPACE 子句,以便所有表都在其默认表空间中创建。HeatWave Service 对表空间有一些限制。

ignore_missing_pks

使实例、架构或表转储实用程序在执行转储时忽略任何缺失的主键,以便即使转储因此检查而停止,也可以继续使用 ocimds 选项。使用此修改创建的转储无法加载到 HeatWave Service 高可用性实例中,因为 HeatWave Service 高可用性使用组复制,需要主键。要添加缺失的主键,请使用 create_invisible_pks 修改,或考虑在源服务器上创建表中的主键。

ignore_wildcard_grants

如果启用,将忽略对使用通配符的架构的授予的错误,这些通配符在启用了 partial_revokes 系统变量的系统中解释不同。

strip_invalid_grants

如果启用,将剥离在加载用户时会失败的授予语句。例如,引用特定例程(不存在)的授予。

create_invisible_pks

在转储元数据中添加一个标志,以通知 MySQL Shell 的转储加载实用程序在每个不包含主键的表中添加不可见列中的主键。此修改允许将某些表缺少主键的转储加载到 HeatWave Service 高可用性实例中。HeatWave Service 高可用性使用组复制,需要主键。

此修改不会更改转储数据,因为表在被转储加载实用程序处理之前不会包含不可见列。不可见列(命名为 "my_row_id")对使用上传表的应用程序没有影响。

以这种方式添加主键目前还不能启用修改后的表向高可用性实例的入站复制,因为该功能目前要求主键同时存在于源服务器和副本服务器中。如果可能,建议您在将表再次转储之前,在源服务器上创建表中的主键,而不是使用此修改。您可以使用不可见列保存主键,而不会对应用程序产生任何影响。这是性能和可用性的最佳实践,有助于转储的数据库与 HeatWave Service 无缝协作。

注意

由于 MySQL 8.0.23 中对隐藏列的限制,MySQL Shell 的转储加载实用程序只能用于将使用 create_invisible_pks 选项在目标 MySQL 实例版本 8.0.24 或更高版本上创建的转储加载。

force_non_standard_fks

在 MySQL 8.4.0 中,添加了 restrict_fk_on_non_standard_key,禁止在启用时创建非标准外键。也就是说,引用非唯一键或复合键的局部字段的键。HeatWave Service 数据库系统默认情况下启用了此变量,这会导致具有此类表的转储无法加载。此选项禁用对非标准外键的检查,并配置转储加载器将 restrict_fk_on_non_standard_key 变量的会话值设置为 OFF。使用非标准键创建外键可能会导致复制失败。

与 S3 兼容的服务选项

MySQL Shell 支持将 MySQL 数据转储到与 S3 兼容的存储桶,例如 Amazon Web Services (AWS) S3。

注意

MySQL Shell 支持在命令行选项、环境变量和配置文件中使用 AWS S3 配置。命令行选项会覆盖环境变量、配置文件和默认选项。

有关配置要求的信息,请参见 第 4.7 节,“云服务配置”.

s3BucketName: "string"

要写入转储的 S3 存储桶的名称。默认情况下,使用位于 ~/.aws/configcredentials 文件的 default 配置文件建立与 S3 存储桶的连接。您可以使用 s3ConfigFiles3CredentialsFile 选项替换连接的替代配置和凭据。有关安装和配置 AWS CLI 的说明,请参见 AWS CLI 入门.

s3CredentialsFile:"string"

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

s3ConfigFile: "string"

包含用于连接的配置文件,而不是默认位置(例如 ~/.aws/config)中的配置文件。通常,配置文件包含用于连接的区域和输出类型。

s3Profile: "string"

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

s3Region: "string"

用于连接的区域名称。

s3EndpointOverride: "string"

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

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

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

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

以下示例显示将 MySQL 实例转储到 S3 存储桶 Bucket001 中的文件夹 test 中,并使用一些兼容性选项

        util.dumpInstance("test",{s3bucketName: "Bucket001", threads: 4, 
        compatibility: ["strip_restricted_grants", "strip_definers", "ignore_missing_pks"]})

以下示例显示将 MySQL 实例转储到对象存储存储桶 Bucket001 中的前缀 test 中,使用配置文件 ocis3EndpointOverride 将连接定向到所需租户和区域的 OCI 端点,以及一些兼容性选项

        util.dumpInstance("test",{s3BucketName: "Bucket001", 
        s3EndpointOverride: "https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com", 
        s3Profile: "oci", threads: 4, 
        compatibility: ["strip_restricted_grants", "strip_definers", "ignore_missing_pks"]})

Microsoft Azure Blob 存储选项

MySQL Shell 支持转储到 Microsoft Azure Blob 存储。

注意

MySQL Shell 支持在命令行选项、环境变量和配置文件中使用 Microsoft Azure Blob 存储配置。命令行选项会覆盖环境变量和配置文件。

有关配置要求和配置类型优先级的顺序信息,请参见 第 4.7 节,“云服务配置”.

azureContainerName: "string"

必需。要写入转储的 Azure 容器的名称。容器必须存在。

azureConfigFile: "string"

可选。包含存储连接参数的配置文件,而不是默认位置(例如 ~/.azure/config)中的配置文件。如果未定义,则使用默认配置文件。

azureContainerName 必须定义,且不能为空。

azureStorageAccount: "string"

可选。用于操作的 Azure 存储帐户的名称。

azureStorageSasToken: "string"

可选。用于操作身份验证的 Azure 共享访问签名 (SAS) 令牌,而不是密钥。

在以下示例中,配置使用连接参数的配置字符串,这意味着转储命令只需要 azureContainerName

示例 config 文件

        [cloud]
         name = AzureCloud

        [storage]
         connection_string=alphanumericConnectionString

示例 dumpInstance 命令,它将实例的内容导出到名为 prefix1 的文件夹中,该文件夹位于名为 mysqlshellazure 的容器中

        util.dumpInstance("prefix1", {azureContainerName: "mysqlshellazure", threads: 4})

使用 PAR 转储到对象存储存储桶

outputURL 也可以是存储桶或前缀预授权请求 (PAR)。这使您能够将数据直接转储到 OCI 对象存储存储桶。

PAR 必须定义为启用以下权限

  • 允许对象读取和写入

  • 启用对象列出

如果将 PAR 定义为 outputURL,则不支持以下选项,如果使用,会导致错误

  • osBucketName

  • s3BucketName

  • azureContainerName

注意

仅存储桶和前缀 PAR 支持作为 outputURL。无法使用对象 PAR。

如果 PAR 不受支持或未定义正确的权限,则返回 OCI 错误。

如果目标存储桶不为空,则操作失败并返回错误。如果存在具有定义前缀的对象,则操作失败并返回错误。

注意

定义前缀 PAR 时,生成的 PAR URL 不包含定义的前缀。您必须手动将其添加到 URL 中。

存储桶 PAR 示例

以下示例将实例转储到定义的存储桶 PAR

      util.dumpInstance("https://objectstorage.region.oraclecloud.com/p/secret/n/myTenancy/b/myBucket/o/")

以下示例将架构 sakila 转储到定义的存储桶 PAR

      util.dumpSchemas(["sakila"], "https://objectstorage.region.oraclecloud.com/p/secret/n/myTenancy/b/myBucket/o/")

以下示例将表 sakila.actor 转储到定义的存储桶 PAR

      util.dumpTables("sakila", ["actor"], "https://objectstorage.region.oraclecloud.com/p/secret/n/myTenancy/b/myBucket/o/")

前缀 PAR 示例

定义前缀 PAR 时,生成的 PAR URL 不包含定义的前缀。您必须手动将其添加到 URL 中。

以下示例将实例转储到定义的存储桶 PAR 中的前缀 MyPrefix

      util.dumpInstance("https://objectstorage.region.oraclecloud.com/p/secret/n/myTenancy/b/myBucket/o/MyPrefix/")

以下示例将架构 sakila 转储到定义的存储桶 PAR 中的前缀 MyPrefix

      util.dumpSchemas(["sakila"], "https://objectstorage.region.oraclecloud.com/p/secret/n/myTenancy/b/myBucket/o/MyPrefix/")

以下示例将表 sakila.actor 转储到定义的存储桶 PAR 中的前缀 MyPrefix

      util.dumpTables("sakila", ["actor"], "https://objectstorage.region.oraclecloud.com/p/secret/n/myTenancy/b/myBucket/o/MyPrefix/")

实用程序错误消息

错误号范围在 52000-52999 之间,是 MySQL Shell 实例转储实用程序 util.dumpInstance()、模式转储实用程序 util.dumpSchemas() 和表转储实用程序 util.dumpTables() 独有的。可能会返回以下错误。

  • 错误号: 52000;符号: SHERR_DUMP_LOCK_TABLES_MISSING_PRIVILEGES

    消息: 用户 %s 缺少对 %s 的以下权限: %s。

  • 错误号: 52001;符号: SHERR_DUMP_GLOBAL_READ_LOCK_FAILED

    消息: 无法获取全局读锁。

  • 错误号: 52002;符号: SHERR_DUMP_LOCK_TABLES_FAILED

    消息: 无法锁定表: %s。

  • 错误号: 52003;符号: SHERR_DUMP_CONSISTENCY_CHECK_FAILED

    消息: 一致性检查失败。

  • 错误号: 52004;符号: SHERR_DUMP_COMPATIBILITY_ISSUES_FOUND

    消息: 发现兼容性问题。

  • 错误号: 52005;符号: SHERR_DUMP_COMPATIBILITY_OPTIONS_FAILED

    消息: 无法应用某些兼容性选项。

  • 错误号: 52006;符号: SHERR_DUMP_WORKER_THREAD_FATAL_ERROR

    消息: 转储期间发生致命错误。

  • 错误号: 52007;符号: SHERR_DUMP_MISSING_GLOBAL_PRIVILEGES

    消息: 用户 %s 缺少以下全局权限: %s。

  • 错误号: 52008;符号: SHERR_DUMP_MISSING_SCHEMA_PRIVILEGES

    消息: 用户 %s 缺少对模式 %s 的以下权限: %s。

  • 错误号: 52009;符号: SHERR_DUMP_MISSING_TABLE_PRIVILEGES

    消息: 用户 %s 缺少对表 %s 的以下权限: %s。

  • 错误号: 52010;符号: SHERR_DUMP_NO_SCHEMAS_SELECTED

    消息: 模式筛选器导致空集。

  • 错误号: 52011;符号: SHERR_DUMP_MANIFEST_PAR_CREATION_FAILED

    消息: 创建对象 '%s' 的 PAR 失败: %s

  • 错误号: 52012;符号: SHERR_DUMP_DW_WRITE_FAILED

    消息: 无法将 %s 写入文件 %s

  • 错误号: 52013;符号: SHERR_DUMP_IC_FAILED_TO_FETCH_VERSION

    消息: 无法获取服务器版本。

  • 错误号: 52014;符号: SHERR_DUMP_SD_CHARSET_NOT_FOUND

    消息: 无法找到字符集: %s

  • 错误号: 52015;符号: SHERR_DUMP_SD_WRITE_FAILED

    消息: 写入时出现 errno %d

  • 错误号: 52016;符号: SHERR_DUMP_SD_QUERY_FAILED

    消息: 无法执行 '%s': %s

  • 错误号: 52017;符号: SHERR_DUMP_SD_COLLATION_DATABASE_ERROR

    消息: 处理 select @@collation_database; 结果时出错

  • 错误号: 52018;符号: SHERR_DUMP_SD_CHARACTER_SET_RESULTS_ERROR

    消息: 无法将 character_set_results 设置为: %s

  • 错误号: 52019;符号: SHERR_DUMP_SD_CANNOT_CREATE_DELIMITER

    消息: 无法为事件创建分隔符: %s

  • 错误号: 52020;符号: SHERR_DUMP_SD_INSUFFICIENT_PRIVILEGE

    消息: %s 权限不足,无法 %s!

  • 错误号: 52021;符号: SHERR_DUMP_SD_MISSING_TABLE

    消息: %s 不存在于 information_schema 中

  • 错误号: 52022;符号: SHERR_DUMP_SD_SHOW_CREATE_TABLE_FAILED

    消息: 运行失败: show create table %s,错误: %s

  • 错误号: 52023;符号: SHERR_DUMP_SD_SHOW_CREATE_TABLE_EMPTY

    消息: 表的空创建表: %s

  • 错误号: 52024;符号: SHERR_DUMP_SD_SHOW_FIELDS_FAILED

    消息: SHOW FIELDS FROM 在视图上失败: %s

  • 错误号: 52025;符号: SHERR_DUMP_SD_SHOW_KEYS_FAILED

    消息: 无法获取表 %s 的键: %s

  • 错误号: 52026;符号: SHERR_DUMP_SD_SHOW_CREATE_VIEW_FAILED

    消息: 失败: SHOW CREATE TABLE %s

  • 错误号: 52027;符号: SHERR_DUMP_SD_SHOW_CREATE_VIEW_EMPTY

    消息: 没有关于视图的信息: %s

  • 错误号: 52028;符号: SHERR_DUMP_SD_SCHEMA_DDL_ERROR

    消息: 转储模式 '%s' 的 DDL 时出错: %s

  • 错误号: 52029;符号: SHERR_DUMP_SD_TABLE_DDL_ERROR

    消息: 转储表 '%s'.'%s' 的 DDL 时出错: %s

  • 错误号: 52030;符号: SHERR_DUMP_SD_VIEW_TEMPORARY_DDL_ERROR

    消息: 转储视图 '%s'.'%s' 的临时 DDL 时出错: %s

  • 错误号: 52031;符号: SHERR_DUMP_SD_VIEW_DDL_ERROR

    消息: 转储视图 '%s'.'%s' 的 DDL 时出错: %s

  • 错误号: 52032;符号: SHERR_DUMP_SD_TRIGGER_COUNT_ERROR

    消息: 无法检查表的触发器计数: '%s'.'%s'

  • 错误号: 52033;符号: SHERR_DUMP_SD_TRIGGER_DDL_ERROR

    消息: 转储表 '%s'.'%s' 的触发器时出错: %s

  • 错误号: 52034;符号: SHERR_DUMP_SD_EVENT_DDL_ERROR

    消息: 转储模式 '%s' 的事件时出错: %s

  • 错误号: 52035;符号: SHERR_DUMP_SD_ROUTINE_DDL_ERROR

    消息: 转储模式 '%s' 的例程时出错: %s

  • 错误号: 52036;符号: SHERR_DUMP_ACCOUNT_WITH_APOSTROPHE

    消息: 帐户 %s 包含 ' 字符,不支持。

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

  • 错误号: 54000;符号: SHERR_DL_COMMON_CONNECTION_ERROR

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

  • 错误号: 5410054511;符号: SHERR_NETWORK_[HTTP error name]

    消息: 上下文相关的消息。