MySQL Shell 的转储加载实用程序 util.loadDump()在 MySQL Shell 8.0.21 中引入,支持将使用 MySQL Shell 的第 11.5 节转储的模式或表导入到 MySQL HeatWave 服务数据库系统(简称 MySQL 数据库系统)或 MySQL Server 实例中 ,“实例转储实用程序、架构转储实用程序和表转储实用程序”。转储加载实用程序提供来自远程存储的数据流、表或表块的并行加载、进度状态跟踪、恢复和重置功能以及转储仍在进行时并发加载的选项。为了获得最佳功能,请始终使用 MySQL Shell 转储和转储加载实用程序的最新版本。
- 关于实用程序
- 要求和限制
- 使用 PAR 加载转储文件
- 运行实用程序
- 负载控制选项
- 加载内容的选项
- MySQL HeatWave 服务和 Oracle 云基础设施选项
- S3 兼容服务的选项
- Microsoft Azure Blob 存储选项
- 过滤选项
- 生成不可见主键模式
- 修改转储数据
- 实用程序错误消息
关于实用程序
要导入到 MySQL 数据库系统,MySQL Shell 必须安装在有权访问 MySQL 数据库系统的 Oracle Cloud Infrastructure 计算实例上。如果转储文件位于 Oracle Cloud Infrastructure 对象存储存储桶中,您可以从计算实例访问对象存储存储桶。如果转储文件位于您的本地系统上,您需要使用您选择的复制实用程序将它们传输到 Oracle Cloud Infrastructure 计算实例,具体取决于您为计算实例选择的操作系统。确保使用 MySQL Shell 的实例转储实用程序或架构转储实用程序中ocimds设置的选项 创建转储,以与 MySQL HeatWave 服务兼容。 trueMySQL 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 在转储加载实用程序中指定选项,将表加载到目标 MySQL 实例中的备用架构中,该实例必须存在于该实例中。在 MySQL Shell 8.0.22 中,表转储实用程序的文件不包含架构信息,因此目标架构必须存在于目标 MySQL 实例中。在该版本中,默认情况下,全局 MySQL Shell 会话的当前架构用作目标架构,或者 schema可以使用该选项来命名该架构。
您可以使用您选择的一组转储加载选项进行试运行,以显示当您使用这些选项实际运行实用程序时将执行哪些操作。
该waitDumpTimeout选项允许您应用仍在创建过程中的转储。表在可用时加载,并且实用程序在新数据停止到达转储位置后等待指定的秒数。当超时结束后,实用程序假定转储已完成并停止导入。
导入的进度状态存储在持久进度状态文件中,该文件记录成功完成的步骤以及中断或失败的步骤。默认情况下,进度状态文件 在转储目录中命名 和创建,但您可以选择不同的名称和位置。当您恢复或重试导入转储时,转储加载实用程序会引用进度状态文件,并跳过已完成的步骤。对于部分加载的表,会自动管理重复数据删除。如果使用Ctrl + C中断正在进行的转储,则在第一次使用该组合键时,实用程序不会启动新任务,但现有任务会继续。再次按Ctrl + C会停止现有任务,从而导致错误消息。在任何一种情况下,实用程序仍然可以从停止的位置恢复导入。 load-progress.*server_uuid*.json
您可以选择重置进度状态并从头开始再次导入转储,但在这种情况下,实用程序不会跳过已创建的对象,也不会管理重复数据删除。如果执行此操作,为了确保正确导入,您必须从目标 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 或更高版本。
- 8.0.27 之前的 MySQL Shell 版本中的 MySQL Shell 转储加载实用程序无法加载使用 MySQL Shell 8.0.27 或更高版本中的转储实用程序创建的转储。这是因为从 MySQL Shell8.0.27 开始,转储元数据中包含有关创建转储时使用的功能的信息。此功能列表不向后兼容,但在未来版本中添加新功能时,它支持向后兼容。为了获得最佳功能,请始终使用 MySQL Shell 转储和转储加载实用程序的最新版本。
- 转储加载实用程序使用该语句,因此目标 MySQL 实例上的系统变量
LOAD DATA LOCAL INFILE的全局设置 必须适用于导入期间。默认情况下,此系统变量在标准 MySQL 数据库系统配置中 设置为 。local_infileON``ON - 该
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提供了存储桶名称,则会自动启用。从 MySQL Shell 8.0.27 开始,引入了对存储桶中所有对象或存储桶中具有特定前缀的对象的 PAR 支持,该选项默认设置为,并且仅在显式设置时才启用。 osBucketName``ociParManifest``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 云基础设施计算实例的文件系统中的转储,则它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 模式下,使用 8 个线程将前缀转储worlddump从对象存储存储桶加载到连接的 MySQL 数据库系统中:
shell-js> util.loadDump("worlddump", {
threads: 8, osBucketName: "hanna-bucket", osNamespace: "idx28w1ckztq"})
对象存储存储桶的命名空间显示在 Oracle Cloud Infrastructure 控制台存储桶详细信息页面的存储桶信息选项卡中,或者可以使用 Oracle Cloud Infrastructure 命令行界面获取。使用默认 Oracle Cloud Infrastructure CLI 配置文件中的默认配置文件或您使用ociConfigFile和 选项指定的替代详细信息建立与对象存储存储桶的连接ociProfile。有关设置 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) 导入进度信息。默认为trueifstdout是终端 (tty),例如当 MySQL Shell 处于交互模式时,false否则。进度信息包括活动线程的数量及其操作、到目前为止加载的数据量、完成百分比和吞吐量。当不显示进度信息时,进度状态仍记录在转储加载实用程序的进度状态文件中。 -
resetProgress: [ true | false ]设置此选项可
true重置进度状态并从头开始重新导入。默认为false.请注意,使用此选项,转储加载实用程序不会跳过已创建的对象,也不会管理重复数据删除。如果要使用此选项,为了确保正确导入,必须首先从目标 MySQL 实例中手动删除所有先前加载的对象,包括该转储中的架构、表、用户、视图、触发器、例程和事件。否则,如果转储文件中的对象已存在于目标 MySQL 实例中,则导入会停止并出现错误。在适当谨慎的情况下,您可以使用该ignoreExistingObjects选项使实用程序报告重复对象,但跳过它们并继续导入。 -
skipBinlog: [ true | false ]通过发出一条语句,在导入过程中跳过目标 MySQL 实例上实用程序使用的会话的二进制日志记录
SET sql_log_bin=0。默认值为false,因此二进制日志记录默认处于活动状态。对于 MySQL 数据库系统,不使用此选项,如果您尝试将其设置为 ,导入会停止并出现错误true。对于其他 MySQL 实例, 如果您要使用该选项或手动在目标 MySQL 实例上应用 源 MySQL 实例中的 GTID 集, 则始终设置skipBinlog为。当 GTID 在目标 MySQL 实例 ( ) 上使用时,设置此选项可防止 在执行导入时生成和分配新的 GTID,以便可以使用从源服务器设置的原始 GTID。用户帐户必须具有设置 系统变量所需的权限。truegtid_executedupdateGtidSet``gtid_mode=ON``true``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 HeatWave 服务实例。 -
handleGrantErrors: [ abort | drop_account | ignore ]GRANT在发生与错误相关的错误或错误 时采取的操作REVOKE。abort:(默认)停止加载过程并显示错误。drop_account:删除帐户并继续加载过程。ignore:忽略错误并继续加载过程。 -
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未设置该选项并且数据文件小于该bytesPerChunk值的 1.5 倍,则在单个语句中请求数据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 文件后更改表结构,这会很有用。之后,您可以通过再次运行转储加载实用程序并loadIndexes设置为true和deferTableIndexes设置为 来 创建二级索引all。从 8.0.31 开始,MySQL Shell 利用 MySQL Server 的并行索引创建功能。以前,转储加载实用程序按顺序添加索引,一次一个。从此版本开始,表中的所有索引都会同时添加。有关限制和配置, 请参阅 为联机 DDL 操作配置并行线程。 -
deferTableIndexes: [ off | fulltext | all ]推迟二级索引的创建,直到加载表数据之后。这可以减少加载时间。
off意味着所有索引都是在表加载期间创建的。默认设置fulltext仅延迟全文索引。all推迟所有二级索引,仅在表加载期间创建主索引,以及(从 MySQL Shell 8.0.22 开始)在包含自动增量值的列上定义的索引。在 MySQL Shell 8.0.21 中,all如果有任何包含自动增量值的唯一键列, 请勿设置。 -
analyzeTables: [ off | on | histogram ]ANALYZE TABLE加载表后 执行。on分析所有表,并且histogram仅分析转储中存储有直方图信息的表。默认为off.即使数据已经加载,您也可以使用此选项运行转储加载实用程序来分析表。 -
showMetadata: [ true | false ]打印
gtid_executed源实例中的 GTID 集以及二进制日志文件名和位置,取自 MySQL Shell 的实例转储实用程序、架构转储实用程序或表转储实用程序生成的转储中包含的转储元数据。元数据以 YAML 格式打印。 MySQL Shell 8.0.24 中提供了此选项。GTID集始终作为转储文件中的字段gtid_executed包含在转储中 。转储加载实用程序不会自动 将源 MySQL 实例中设置的 GTID 应用于目标 MySQL 实例。要将这些 GTID 应用于目标 MySQL 实例以用于复制,请使用该 选项或手动导入它们,具体取决于目标 MySQL 实例的版本。从 MySQL Shell 8.0.23 开始,MySQL 数据库系统实例支持此功能。有关详细信息,请参阅该选项的描述 。gtidExecuted``@.jsongtid_executedupdateGtidSet``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 集 应用到gtid_purged目标 MySQL 实例上的 GTID 集。 GTIDgtid_purged集保存已在服务器上应用的所有事务的GTID,但不存在于服务器上的任何二进制日志文件中。 MySQL Shell 8.0.22 中提供了此选项,但在该版本中,由于权限限制,MySQL 数据库系统不支持此选项。从 MySQL 8.0.23 开始,该选项还可用于 MySQL 数据库系统实例。默认值为off,表示不应用 GTID 集。不要将此选项用于 MySQL Shell 的表转储实用程序生成的转储,仅适用于 MySQL Shell 的实例转储实用程序或架构转储实用程序生成的转储。另外,当组复制在目标 MySQL 实例上运行时,请勿使用此选项。对于非 MySQL 数据库系统实例的 MySQL 实例,当您设置append或replace更新 GTID 集时,还要将该skipBinlog选项设置为true。这可确保源服务器上的 GTID 与目标服务器上的 GTID 匹配。对于 MySQL 数据库系统实例,不使用此选项。对于 MySQL 8.0 中的目标 MySQL 实例,您可以将该选项设置为append,这会将gtid_executed源 MySQL 实例中设置的 GTID 附加到gtid_purged目标 MySQL 实例上设置的 GTID。gtid_executed要应用的 GTID 集(显示在转储文件的字段中 )gtidExecuted不得@.json与gtid_executed目标 MySQL 实例上已有的集相交。例如,当将架构从不同的源 MySQL 实例导入到已具有来自其他源服务器的架构的目标 MySQL 实例时,您可以使用此选项。您还可以用于replaceMySQL 8.0 中的目标 MySQL 实例,将gtid_purged目标 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 集必须为空,因此该实例必须未使用且之前没有导入 GTID 集gtid_executed。gtid_purged在 MySQL Shell 8.0.21 中,此选项不可用,您可以在 MySQL Server 实例上手动应用 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 Server 实例的gtid_executedGTID 集添加到目标 MySQL 实例的gtid_purgedGTID 集。对于 MySQL 5.7,+必须省略 加号 ( ),并且 目标 MySQL 实例上的gtid_executed和 GTID 集必须为空。gtid_purged详细信息请参见gtid_purged目标MySQL实例版本中系统变量的说明。 -
createInvisiblePKs: [ true | false ]为转储中不包含主键的每个表添加不可见列中的主键。
true如果转储是create_invisible_pks使用 MySQL Shell 的实例转储实用程序util.dumpInstance()、架构转储实用程序util.dumpSchemas()或表转储实用程序的选项创建的,则自动应用该 设置util.dumpTables()。仅当加载转储的 DDL (loadDdl: true) 时才会添加主键。不可见列(名为“my_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 HeatWave 服务高可用性数据库系统,因为该功能当前要求主键同时存在于源服务器和副本服务器中。如果可能,请考虑在再次转储之前在源服务器上的表中创建主键,而不是使用此选项。从 MySQL 8.0.23 开始,您可以通过使用不可见列来保存主键来执行此操作,而不会对应用程序产生影响。这是性能和可用性的最佳实践,有助于转储的数据库与 MySQL HeatWave 服务无缝协作。
MySQL HeatWave 服务和 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 控制台存储桶详细信息页面的存储桶信息选项卡中,或者可以使用 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。
笔记
MySQL Shell 支持命令行选项、环境变量和配置文件中的 AWS S3 配置。命令行选项覆盖环境变量、配置文件和默认选项。
有关配置要求的信息,请参阅 第 4.7 节 “云服务配置”。
-
s3BucketName: "\*string\*"转储文件所在的 S3 存储桶的名称。默认情况下,
defaultAmazon Web Services (AWS) CLI 中的配置文件config和credentials位于 的文件~/.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 配置文件中的配置文件。 -
s3Region: "\*string\*"用于连接的区域的名称。
-
s3EndpointOverride: "\*string\*"要使用的端点 URL,而不是默认值。连接到 Oracle Cloud Infrastructure S3 兼容性 API 时,端点采用以下格式: .替换为对象存储命名空间和 您的区域标识符。例如,美国东部(阿什本)区域的区域标识符是。
https://*namespace*.compat.objectstorage.*region*.oraclecloud.comnamespace**regionus-ashburn-1对于美国东部(阿什本)区域中名为 axaxnpcrorw5 的命名空间:https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com。
test以下示例显示了从AWS S3 存储桶 , 中 的文件夹 , 中加载 MySQL 转储Bucket001:
util.loadDump("test",{s3BucketName: "Bucket001", threads: 4})
test以下示例显示了从对象存储存储桶 中的 前缀 中加载 MySQL 转储,Bucket001使用配置文件 , oci并将 s3EndpointOverride连接定向到所需租户和区域的 OCI 端点:
util.loadDump("test",{s3BucketName: "Bucket001",
s3EndpointOverride: "https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com",
s3Profile: "oci", threads: 4})
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) 令牌,而不是密钥。
在以下示例中,配置使用配置字符串作为连接参数,这意味着 dump 命令仅需要azureContainerName.
示例config文件:
解释 [cloud]
name = AzureCloud
[storage]
connection_string=alphanumericConnectionString
示例命令,将名为 的容器中loadDump名为 的文件夹的内容导入到连接的 MySQL 实例: prefix1``mysqlshellazure
util.loadDump("prefix1", {azureContainerName: "mysqlshellazure", 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 开始,您可以使用 转储加载实用程序中的excludeUsers或includeUsers选项来指定要在导入中排除或包含的用户帐户。笔记在 MySQL Shell 8.0.21 中,如果转储文件中存在用户帐户或其他受限用户帐户名称,则尝试将用户导入 MySQL 数据库系统会导致导入失败,root因此无法将用户导入 MySQL 数据库系统。该版本支持。MySQL Shell 的架构转储实用程序和表转储实用程序不包含转储中的用户、角色和授权,但实例转储实用程序可以并且默认情况下包含。从 MySQL Shell 8.0.22 开始,还可以在实例转储实用程序中使用excludeUsers和选项来从转储文件中排除或包含指定用户帐户。includeUsers如果您指定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。 MySQL Shell 8.0.22 中提供了此选项,excludeUsers如果目标 MySQL 实例中只需要几个用户帐户,您可以使用它作为替代方案。您还可以指定两个选项以包含某些帐户并排除其他帐户。 -
excludeSchemas: \*array of strings\*从导入中排除指定的架构。请注意,
information_schema、mysql、ndbinfo、performance_schema和sys模式始终从 MySQL Shell 实例转储实用程序创建的转储中排除。 -
includeSchemas: \*array of strings\*仅从转储文件加载指定模式。您可以指定这两个选项以包含某些模式并排除其他模式。
-
excludeTables: \*array of strings\*从导入中排除指定的表,以便它们不会上传到目标 MySQL 实例。表名必须使用有效的模式名称进行限定,并在需要时用反引号字符引起来。请注意,尽管包含了 DDL 语句,但 、
mysql.apply_status、 和 的数据始终从 MySQL Shell 的架构转储实用程序创建的转储中排除。mysql.general_log``mysql.schema``mysql.slow_log tables -
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模式, 生成隐形主键。在此模式下运行时,对于任何在没有显式主键的情况下创建的 InnoDB 表,MySQL 服务器会自动向该表添加生成的不可见主键(GIPK)。通过设置为 ON 来启用此模式 sql_generate_invisible_primary_key 。
MySQL Shell 的加载实用程序选项 createInvisiblePKs使用服务器的 GIPK 模式为没有主键的表生成不可见的主键。
在某些情况下,如果用户没有足够的权限使用 GIPK 模式,MySQL Shell 可以回退到以前生成不可见主键的方法。
如果createInvisiblePKs:false和 sql_generate_invisible_primary_key=OFF,则不会为从转储加载的任何表生成主键。
如果createInvisiblePKs:false是 sql_generate_invisible_primary_key=ON,MySQL Shell 会尝试设置 sql_generate_invisible_primary_key=OFF。如果更改成功,则不会为从转储加载的任何表生成主键。
如果createInvisiblePKs:true是 sql_generate_invisible_primary_key=OFF,MySQL Shell 会尝试设置 sql_generate_invisible_primary_key=ON。如果更改成功,将为每个没有从转储加载主键的表生成主键。
如果createInvisiblePKs:true和 sql_generate_invisible_primary_key=ON,则为使用 MySQL 服务器 GIPK 模式加载的每个表生成主键。
如果运行 MySQL Shell 加载实用程序的用户没有所需的 MYSQL Server 权限,则尝试设置 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 加载实用程序选项 ,但 禁用了 createInvisiblePKsGIPK 服务器选项, 则 MySQL Shell 会尝试启用.如果用户在目标 MySQL 服务器上具有适当的权限,则 启用,并且加载实用程序使用服务器的 GIPK 模式在加载的表上创建不可见的主键。如果用户没有所需的权限(例如在 MySQL HeatWave 服务上),MySQL Shell 将回退到之前的行为并在表上创建主键,而不使用服务器的 GIPK 模式。 sql_generate_invisible_primary_keysql_generate_invisible_primary_keysql_generate_invisible_primary_key
修改转储数据
MySQL Shell 的并行表导入实用程序 util.importTable()可与转储加载实用程序结合使用util.loadDump() ,在将分块输出文件上传到目标 MySQL 实例之前修改分块输出文件中的数据。通过此方法可以一次修改一张表的数据。请遵循以下过程,该过程适用于 MySQL Shell 8.0.23:
-
loadDdl: true使用带有和选项 的转储加载实用程序loadData: false,仅加载 DDL 文件,并在目标 MySQL 实例上创建不带数据的选定表。解释shell-js> util.loadDump("/mnt/data/proddump", { > includeTables: ["product.pricing"], > loadDdl: true, > loadData: false}); -
使用并行表导入实用程序捕获并转换表的数据,并将其导入到目标 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"}}); -
根据需要对转储文件中需要修改数据的任何其他表重复步骤 1 和 2。
-
当您完成上传所有需要修改的表和数据后,使用转储加载实用程序加载 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_execulated,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 错误相匹配 - 例如,当未找到 URL 的目标时(HTTP 404 Not Found),会发生错误 54404。可能会返回以下错误:
-
错误编号:
54000;象征:SHERR_DL_COMMON_CONNECTION_ERROR消息:%s连接错误:%s。
-
错误编号:
54100至54511;象征:SHERR_NETWORK_[*HTTP error name*]消息:特定于上下文的消息




