MySQL Shell 8.0/MySQL Shell实用程序/ Dump加载实用程序

8.6转储加载实用工具

MySQL Shell的转储加载实用程序util.loadDump (),在MySQL Shell 8.0.21中引入,支持将使用MySQL Shell转储的模式或表导入到MySQL数据库服务DB系统(简称MySQL DB系统)或MySQL服务器实例中ocimds选项设置为真正的在MySQL Shell的实例转储实用程序或模式转储实用程序中,以兼容MySQL数据库服务。MySQL Shell的表转储实用程序不使用这个选项。

请注意
  1. 目标MySQL实例需要MySQL 5.7或更高版本。

  2. 转储加载实用程序使用加载数据本地文件语句,因此全局设置local_infile目标MySQL实例上的system变量必须为在导入期间。默认情况下,该系统变量设置为在标准的MySQL DB系统配置中。

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

  4. 在目标MySQL实例上,转储加载实用程序检查sql_require_primary_key系统变量设置为,如果是,如果转储文件中有一个表没有主键,则返回一个错误。默认情况下,该系统变量设置为在标准的MySQL DB系统配置中。

  5. 转储加载实用程序不会自动应用gtid_executed从源MySQL实例到目标MySQL实例的GTID设置。GTID集包含在MySQL Shell的实例转储实用程序、模式转储实用程序或表转储实用程序的转储元数据中,如gtidExecuted@.json转储文件。要在目标MySQL实例上应用这些gtid以用于复制,请使用updateGtidSet选项或手动导入它们,这取决于目标MySQL实例的版本和MySQL Shell版本。从MySQL Shell 8.0.23开始,支持MySQL DB系统实例。的描述updateGtidSet详情选项。

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

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

您可以在转储加载实用程序中使用进一步的选项自定义导入:

  • 您可以选择要导入或要从导入中排除的单个表或模式。

  • 默认情况下,用户及其角色和授权将被排除,但您可以选择导入它们。

  • 您可以为目标MySQL实例中的数据指定与转储文件中使用的数据不同的字符集。

  • 您可以更新分析表直方图,即使数据已经加载。

  • 可以选择在导入过程中跳过目标MySQL实例的二进制日志记录设置sql_log_bin = 0声明。

您可以使用所选的转储加载选项集进行演练,以显示在使用这些选项实际运行实用程序时将执行哪些操作。

waitDumpTimeout选项使您可以应用仍在创建过程中的转储。表在可用时被加载,实用程序在新数据停止到达转储位置后等待指定的秒数。当超时时间过去时,实用程序认为转储已经完成并停止导入。

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

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

重要的

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

如果在将数据导入到目标MySQL实例之前需要修改转储数据文件中的任何数据,可以通过结合MySQL Shell的并行表导入实用程序来完成此操作util.importTable ()使用转储加载实用程序。为此,首先使用转储加载实用程序仅加载所选表的DDL,以便在目标服务器上创建表。然后使用并行表导入实用程序从表的输出文件捕获和转换数据,并将其导入到目标表。对于要修改数据的任何其他表,根据需要重复该过程。最后,使用转储加载实用程序为您不想修改的其他表加载DDL和数据,不包括您修改过的表。有关过程的描述,请参见@.manifest.json).还可以为一个文本文件创建一个预认证的读写请求,该文本文件的前缀位置与对象存储桶中的转储文件相同。这将是转储加载实用程序的进度状态文件,在加载带有预验证请求的转储文件时需要该文件。您可以使用具有所需权限的任何用户帐户来创建请求。文本文件可以有任何名称,您可以创建该文件,也可以让实用程序创建它。该文件的内容将采用JSON格式,因此a. json如果您正在使用一个文件扩展名(例如,progress.json).

作为与转储文件一起存储进度状态文件的替代方法(默认为转储文件),您可以在运行转储加载实用程序的位置使用一个本地文件。如果您没有权限为进度状态文件创建预身份验证的读写请求,则此方法允许您存储进度。使用本地文件时,请注意,不能通过从替代位置运行转储加载实用程序来恢复转储。

类的预身份验证请求时,在运行转储加载实用程序时,将转储的URL指定为预身份验证的请求URL@.manifest.json文件。还要指定进度状态文件(progressFileoption)作为对象存储桶中文件的预认证请求URL,或者作为本地系统上的文件(如果您选择了该选项)。然后,运行转储加载实用程序的用户帐户可以使用清单文件中的url加载转储文件,而无需额外的访问权限。如果转储仍在进行中,转储加载实用程序将监视并等待清单文件(而不是对象存储桶)的新添加。

转储的DDL文件是由单个线程加载的,但数据是根据您选择的线程数并行加载的,默认为4。如果在创建转储时对表数据进行了分块,则可以对一个表使用多个线程,否则每个线程一次加载一个表。转储加载实用程序跨线程调度数据导入,以最大限度地提高并行性。如果转储文件是由MySQL Shell的转储实用程序压缩的,那么转储加载实用程序将为它们处理解压缩。

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

若要进一步改进数据加载性能,可以禁用InnoDB在导入过程中,在目标MySQL实例上重做日志。请注意,这只能在新的MySQL服务器实例(不是生产系统)上执行,并且该特性在MySQL DB系统上不可用。有关更多信息,请参见禁用重做日志

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

在MySQL Shell API中,转储加载实用程序是跑龙套全局对象,具有以下签名:

跑龙套。loadDump (url[选项])

如果您正在导入位于运行该实用程序的Oracle Cloud Infrastructure Compute实例的文件系统中的转储文件,url字符串,指定包含转储文件的本地目录的路径。属性作为本地目录路径的前缀文件:/ /模式。在这个例子中,在MySQL Shell的JavaScript模式下,执行了一个演练,以检查转储文件从本地目录加载到连接的MySQL实例时没有问题:

shell-js >跑龙套。loadDump("/mnt/data/worlddump", {dryRun: true})

如果您正在从Oracle Cloud Infrastructure对象存储桶导入转储,url转储文件在桶中的路径前缀是否为outputUrl创建转储时的参数。使用osBucketName选项提供对象存储桶的名称osNamespace选项来标识桶的名称空间。在本例中,在MySQL Shell的JavaScript模式下,转储为前缀worlddump通过8个线程从对象存储桶加载到连接的MySQL DB系统:

shell-js >跑龙套。loadaddump ("worlddump", {> threads: 8, osBucketName: "hanna-bucket", osNamespace: "idx28w1ckztq"})

界面显示对象存储桶的命名空间桶的信息在Oracle Cloud Infrastructure控制台中,可以在桶详细信息页面的tab页中获取,也可以通过Oracle Cloud Infrastructure命令行界面获取。使用默认Oracle Cloud Infrastructure CLI配置文件中的默认配置文件建立到对象存储桶的连接,或使用您指定的替代详细信息ociConfigFile而且ociProfile选项。有关设置CLI配置文件的说明,请参见SDK和CLI配置文件

选项为空时可省略的选项字典。有以下选项:

dryRun: [true | false]

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

osBucketName:“字符串

转储文件所在的Oracle Cloud Infrastructure对象存储桶的名称。默认情况下,(默认)Oracle Cloud Infrastructure CLI配置文件中的配置文件~ / .oci /配置用于建立与桶的连接。属性的连接可以替换一个可供选择的配置文件ociConfigFile而且ociProfile选项。有关设置CLI配置文件的说明,请参见SDK和CLI配置文件

osNamespace:“字符串

命名对象存储桶的Oracle Cloud Infrastructure命名空间osBucketName所在地。对象存储桶的命名空间在Oracle Cloud Infrastructure控制台中桶详情页面的“桶信息”页签中显示,也可以通过Oracle Cloud Infrastructure命令行获取。

ociConfigFile:“字符串

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

ociProfile:“字符串

用于连接的Oracle Cloud Infrastructure配置文件的配置文件名称,而不是(默认)Oracle Cloud Infrastructure命令行配置文件中用于连接的profile。

线程:int

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

progressFile:“字符串

转储加载实用程序的进度状态文件的本地文件位置,该文件持久保存导入的进度状态。默认情况下,进度状态文件被命名load-progress。server_uuid. json并在转储目录中创建,但您可以使用此选项更改它。设置progressFile对空字符串禁用进度状态跟踪,这意味着转储加载实用程序不能恢复部分完成的导入。

showProgress: [true | false]

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

resetProgress: [true | false]

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

waitDumpTimeout:int

设置此选项可通过指定一个超时(以秒为单位)来激活并发加载,在此超时时间内,实用程序将在转储位置中的所有上传数据块处理完毕后等待进一步的数据。这允许实用程序在转储仍在创建过程中时导入转储。数据在可用时进行处理,超过超时时停止导入,转储位置中不再出现任何数据。默认设置,0,意味着当所有上传的数据块都已处理完毕时,该实用程序将转储标记为完成,而不等待更多数据。

ignoreExistingObjects: [true | false]

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

ignoreVersion: [true | false]

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

在MySQL Shell 8.0.23中,此选项还允许导入不使用ocimds选项进入MySQL数据库服务实例。

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

showMetadata: [true | false]

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

gtid_executedGTID集总是包含在转储中gtidExecuted@.json转储文件。转储加载实用程序不会自动应用gtid_executed从源MySQL实例到目标MySQL实例的GTID设置。要在目标MySQL实例上应用这些gtid以用于复制,请使用updateGtidSet选项或手动导入它们,这取决于目标MySQL实例的发布版本。从MySQL Shell 8.0.23开始,支持MySQL DB系统实例。的描述updateGtidSet详情选项。

包含二进制日志文件名和位置,前提是用于运行转储实用程序的用户帐户具有复制客户端特权。二进制日志文件名和位置可用于设置从未启用gtid且不使用基于gtid的复制的源服务器复制到启用gtid的副本ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS选项将复制源更改为语句(可从MySQL Server 8.0.23获得)。

updateGtidSet: [off | appapp| replace]

应用gtid_executedGTID从源MySQL实例(如转储元数据中记录的那样)设置为gtid_purged在目标MySQL实例上设置GTID。的gtid_purgedGTID集保存了服务器上应用的所有事务的GTID,但在服务器上的任何二进制日志文件中都不存在。该选项在MySQL Shell 8.0.22中可用,但在该版本中,由于权限限制,MySQL DB系统不支持该选项。从MySQL 8.0.23开始,该选项也可以用于MySQL DB系统实例。默认为,意味着未应用GTID集。

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

对于不是MySQL DB系统实例的MySQL实例,当您设置附加取代更新GTID设置,也设置skipBinlog选项真正的.这确保源服务器上的gtid与目标服务器上的gtid匹配。对于MySQL DB系统实例,不使用此选项。

对于MySQL 8.0的目标MySQL实例,可以将该选项设置为附加,它附加gtid_executedGTID设置从源MySQL实例到gtid_purged在目标MySQL实例上设置GTID。的gtid_executed设置为应用的GTID,该设置显示在gtidExecuted@.json转储文件时,一定不要与之相交gtid_executed已在目标MySQL实例上设置。例如,当您从不同的源MySQL实例导入模式到已经从其他源服务器导入模式的目标MySQL实例时,可以使用此选项。

你也可以使用取代用于MySQL 8.0的目标MySQL实例,以替换gtid_purged在目标MySQL实例上设置GTIDgtid_executed从源MySQL实例设置GTID。要做到这一点,gtid_executed的超集gtid_purgedGTID设置在目标MySQL实例上,并且不能与目标的事务集相交gtid_executed的GTID集合gtid_purgedGTID集。

对于MySQL 5.7版本的目标MySQL实例,将该选项设置为取代,取代gtid_purged在目标MySQL实例上设置GTIDgtid_executed从源MySQL实例设置GTID。在MySQL 5.7中,要做到这一点gtid_executed而且gtid_purged目标MySQL实例上的GTID集必须为空,因此该实例必须未使用,之前没有导入GTID集。

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

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

这条语句,从MySQL 8.0开始工作,添加源MySQL服务器实例的gtid_executedGTID设置为目标MySQL实例的gtid_purgedGTID集。对于MySQL 5.7,加号(+)则必须省略gtid_executed而且gtid_purged目标MySQL实例上的GTID设置必须为空。详细信息请参见gtid_purged系统变量在目标MySQL实例的发布。

skipBinlog: [true | false]

跳过实用程序在导入过程中使用的会话在目标MySQL实例上的二进制日志记录,通过发出设置sql_log_bin = 0声明。默认为,因此二进制日志记录在默认情况下是活动的。对于MySQL DB系统,不使用此选项,如果试图将其设置为,导入将停止并报错真正的.对于其他MySQL实例,始终设置skipBinlog真正的如果你在应用gtid_executed从源MySQL实例到目标MySQL实例的GTID设置,或者使用updateGtidSet选项或手动。当gtid在目标MySQL实例上使用时(gtid_mode =对),将此选项设置为真正的防止在执行导入时生成和分配新的GTID,以便可以使用源服务器上的原始GTID集。用户帐户必须具有所需的权限才能设置sql_log_bin系统变量。

loadIndexes: [true | false]

创建(真正的)或不创建()表的二级索引。默认为真正的.当此选项设置为,在导入过程中不会创建二级索引,必须在导入后创建二级索引。如果您分别加载DDL文件和数据文件,并且希望在加载DDL文件之后对表结构进行更改,那么这可能很有用。然后,您可以通过再次运行转储加载实用程序来创建次要索引loadIndexes设置为真正的而且deferTableIndexes设置为所有

deferTableIndexes: [off | fulltext | all]

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

analyzeTables: [off | on |直方图]

执行分析表当表已加载时。分析所有表,和柱状图仅分析转储中存储有直方图信息的表。默认为.您可以使用此选项运行转储加载实用程序来分析表,即使数据已经加载。

characterSet:“字符串

用于导入到目标MySQL实例的字符集,例如字符集选项加载数据声明。默认值是MySQL Shell的实例转储实用程序、模式转储实用程序或表转储实用程序创建转储时使用的转储元数据中给出的字符集utf8mb4.字符集必须由character_set_client系统变量,MySQL实例支持。

模式:“字符串

由MySQL Shell的表转储实用程序生成的转储必须加载到其中的现有目标模式。

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

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

excludeSchemas:字符串数组

从导入中排除已命名的模式。注意information_schemamysqlndbinfoperformance_schema,sys模式总是被排除在由MySQL Shell的实例转储实用程序创建的转储之外。如果转储文件中不存在命名模式,实用程序将忽略该项。

includeSchemas:字符串数组

只从转储文件加载已命名的模式。可以同时指定两个选项,在这种情况下,模式名与includeSchemas字符串和excludeSchemas字符串被排除。

excludeTables:字符串数组

从导入中排除已命名表。表名必须用有效的模式名限定,并在需要时用反勾字符引号括起来。的数据mysql.apply_statusmysql.general_logmysql.schema,mysql。slow_log表总是排除在由MySQL Shell的模式转储实用程序创建的转储之外,尽管它们的DDL语句包括在内。表由excludeTables选项没有上传到目标MySQL实例。如果模式中不存在命名表,或者转储文件中不存在该模式,则转储加载实用程序将忽略该项。

includeTables:字符串数组

只从转储文件中加载已命名的表。表名必须用有效的模式名限定,并在需要时用反勾字符引号括起来。可以同时指定两个选项,在这种情况下,表名与includeTables字符串和excludeTables字符串被排除。

loadDdl: [true | false]

将此选项设置为真正的仅从转储中导入DDL文件,而不导入数据。默认为

loadData: [true | false]

将此选项设置为真正的仅从转储中导入数据文件,而不导入DDL文件。默认为

loadUsers: [true | false]

导入(真正的)或不输入()用户和他们的角色和授权到目标MySQL实例。默认为,默认不导入用户。当前用户的语句将被跳过。在MySQL Shell 8.0.22中,如果一个用户已经存在于目标MySQL实例中,则返回一个错误,并且不应用转储文件中的用户授权。在MySQL Shell 8.0.22中,您可以使用excludeUsersincludeUsers选项,以指定要排除或包含在导入中的用户帐户。

请注意

在MySQL Shell 8.0.21中,试图将用户导入到MySQL DB系统会导致导入失败用户帐户或其他受限制的用户帐户名出现在转储文件中,因此该版本不支持将用户导入到MySQL DB系统。

MySQL Shell的模式转储实用程序和表转储实用程序在转储中不包括用户、角色和授权,但是实例转储实用程序可以,并且默认情况下是这样做的。从MySQL Shell 8.0.22,excludeUsers而且includeUsers还可以在实例转储实用程序中使用选项从转储文件中排除或包括已命名的用户帐户。

如果你指定真正的但是提供的转储文件不包含用户帐户,在MySQL Shell 8.0.23之前,实用程序返回一个错误并停止导入。在MySQL Shell 8.0.23中,该实用程序反而返回一个警告并继续。

excludeUsers:字符串数组

从导入中排除指定用户帐户。这个选项在MySQL Shell 8.0.22中是可用的,你可以使用它来排除不被允许导入到MySQL DB系统的用户帐户,或者在目标MySQL实例中已经存在或不需要的用户帐户。按格式指定每个用户帐户字符串“‘user_name“@”host_name’”对于使用用户名和主机名定义的帐户,或“‘user_name’”对于仅使用用户名定义的帐户(相当于“‘user_name“@”’”).如果转储文件中不存在指定用户帐户,实用程序将忽略该项。

includeUsers:字符串数组

在导入中只包括指定的用户帐户。属性指定每个用户帐户字符串excludeUsers选择。这个选项在MySQL Shell 8.0.22中可用,您可以使用它作为excludeUsers如果目标MySQL实例中只需要几个用户帐户。也可以同时指定两个选项,在这种情况下,用户帐户与includeUsers字符串和excludeUsers字符串被排除。

createInvisiblePKs: [true | false]

在转储中不包含主键的每个表的不可见列中添加主键。的真正的属性创建转储时,将自动应用create_invisible_pks选择MySQL Shell的实例转储实用程序util.dumpInstance (),模式转储实用程序util.dumpSchemas (),或表转储实用程序util.dumpTables ().主键只在加载转储的DDL时添加(loadDdl:真).不可见的列(命名为“my_row_id)对使用上传表的应用程序没有影响。

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

以这种方式添加主键还不能将修改后的表入站复制到High Availability实例,因为该特性目前要求主键同时存在于源服务器和副本服务器中。如果可能,不要使用此选项,而是考虑在再次转储它们之前在源服务器上的表中创建主键。从MySQL 8.0.23开始,您可以使用不可见的列来保存主键,从而对应用程序没有影响。这是性能和可用性的最佳实践,并帮助转储的数据库与MySQL数据库服务无缝地工作。

修改转储数据

MySQL Shell的并行表导入实用程序util.importTable ()可以与转储加载实用程序结合使用吗util.loadDump ()在将数据上传到目标MySQL实例之前修改分块输出文件中的数据。您可以通过此方法一次修改一个表的数据。下面的步骤可以在MySQL Shell 8.0.23上执行:

  1. 方法使用转储加载实用程序loadDdl选项,加载DDL文件并在没有数据的目标MySQL实例上创建所选表。

    shell-js >跑龙套。loadDump("/mnt/data/ prodump ", {> includeTables: ["product. dump ("/mnt/data/ prodump "), > loadadddl: true, > loadData: false});
  2. 使用并行表导入实用程序来捕获和转换表的数据,并将其导入到目标MySQL实例的空表中。在本例中,用于定价表位于多个压缩文件中,这些文件是使用通配符模式匹配指定的。的值。id而且prodname转储文件中的列以不变的方式分配给目标表中的相同列。的值。价格捕获转储文件中的列并将其分配给该变量@1.的decodeColumns然后,期权用于按标准金额降低价格,并将降低的价格放在价格目标表的列。

    shell-js >跑龙套。importTable(“/ mnt /数据/ proddump product@pricing@ *。零强度时间”,{表> >模式:“产品”:“定价”,>列:[" id "、“prodname”1),> decodeColumns:{“价格”:“0.8”* @1}});
  3. 对于转储文件中需要修改数据的任何其他表,根据需要重复步骤1和2。

  4. 当您上传完所有需要修改的表和数据后,使用转储加载实用程序加载DDL和其他不需要修改的表的数据。确保排除在前面步骤中修改过的表。

    shell-js >跑龙套。loadDump("/mnt/data/ prodump ", {excludeTables: ["product.pricing"]});