MySQL Shell 9.0  /  MySQL Shell 实用程序  /  复制实例、模式和表

11.7 复制实例、模式和表

本节介绍 MySQL Shell 复制实用程序

关于实用程序

复制实用程序使您能够在 MySQL 实例之间复制 DDL 和数据,而无需中间存储。数据从源流向目标。

大约 32MB 的内存预先分配用于存储元数据文件,这些文件在读取和处理复制时会被丢弃。

可以从源复制到 HeatWave 服务数据库系统。如果将数据库系统定义为目标,则实用程序会默认检测到这一点并启用 HeatWave 服务兼容性检查。有关这些检查的更多信息,请参见 第 11.5 节,“实例转储实用程序、模式转储实用程序和表转储实用程序”

复制实用程序将转储和加载实用程序组合到一个操作中,以方便使用。加载和转储实用程序的大多数可用选项也适用于复制实用程序,并在以下各节中进行介绍。

要求和限制

  • 复制实用程序使用 LOAD DATA LOCAL INFILE 语句来上传数据,因此 local_infile 系统变量必须在目标服务器上设置为 ON。您可以在运行复制实用程序之前,在目标实例上发出以下语句来完成此操作

    SET GLOBAL local_infile = 1;

    为了避免已知与 LOAD DATA LOCAL 相关的潜在安全问题,当 MySQL 服务器使用文件传输请求回复实用程序的 LOAD DATA 请求时,实用程序只发送预定的数据块,并忽略服务器尝试的任何特定请求。有关更多信息,请参见 LOAD DATA LOCAL 的安全注意事项

  • 复制实用程序只支持 MySQL Server 版本的通用可用性 (GA) 版本。

  • 目标 MySQL 实例需要 MySQL 5.7 或更高版本,才能加载复制内容。

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

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

  • 用于运行实用程序的用户帐户必须在所有相关模式上拥有以下最小必需权限集:EVENTRELOADSELECTSHOW VIEWTRIGGER

    • 如果 consistent 选项设置为 true(默认值),则如果 RELOAD 权限不可用,则所有复制表的 LOCK TABLES 权限可以替代它。

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

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

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

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

  • 为了与 HeatWave 服务兼容,所有表都必须使用 InnoDB 存储引擎。如果将数据库系统定义为目标,则实用程序会检测到这一点,默认情况下启用 HeatWave 服务兼容性检查,并检查源中是否发现任何异常,并且 compatibility 选项会更改复制以将其他存储引擎替换为 InnoDB

  • 对于实例和模式复制实用程序,为了与 HeatWave 服务兼容,实例或模式中的所有表都必须位于 MySQL 数据目录中,并且必须使用默认的模式加密。

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

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

    有关更多信息,请参见 HeatWave 服务和 Oracle Cloud Infrastructure 选项

  • 与 HeatWave 服务的兼容性相关的许多其他安全限制和要求适用于诸如表空间和权限等项目。 compatibility 选项会自动更改复制以解决某些兼容性问题。您可能需要(或更愿意)手动进行一些更改。有关更多详细信息,请参见 compatibility 选项的说明。

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

  • 如果源是 MySQL 5.7,目标是数据库系统,则 util.checkForServerUpgrade 会自动运行。升级前检查会根据复制中包含的对象类型运行。

  • 复制实用程序不支持进度恢复。

运行实用程序

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

  • util.copyInstance(connectionData[, options]):使能够将整个实例复制到另一台服务器。

    • connectionData:定义要复制到的目标服务器的连接详细信息。

      这可以是以下之一

      • 简单的 user@host 字符串。

      • 连接 URI,例如 mysql://user@host:port?option=value,option=value

      • 连接字典,例如 { "scheme": "mysql", "user": "u", "host": "h", "port": 1234, "option": "value" }

  • util.copySchemas(schemaList, connectionData[, options]):使能够将一个或多个模式复制到另一台服务器。

    • schemaList:定义要从当前服务器复制到目标服务器的模式列表。

  • util.copyTables(schemaName, tablesList, connectionData[, options]):使能够将一个或多个表从模式复制到另一台服务器。

    • schemaName:定义要从中复制表的模式的名称。

    • tablesList:定义要从命名模式复制到目标服务器的表的名称。

复制控制选项

dryRun: [ true | false ]

显示有关使用指定选项集进行的复制的信息,以及有关 HeatWave 服务兼容性检查结果的信息,但不执行复制。设置此选项使您能够在开始复制之前列出所有兼容性问题。默认值为 false

showProgress: [ true | false ]

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

threads: int

用于从 MySQL 实例复制数据块的并行线程数。每个线程都与 MySQL 实例有自己的连接。默认值为 4。

复制实用程序需要两倍的线程数,一个线程用于复制,一个线程用于写入。如果 threads 设置为 N,则使用 2N 个线程。

maxRate: "string"

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

defaultCharacterSet: "string"

在 MySQL Shell 与目标服务器建立的会话连接期间使用的字符集。默认值为 utf8mb4。系统变量 character_set_clientcharacter_set_connectioncharacter_set_results 的会话值对于每个连接都设置为该值。字符集必须是 character_set_client 系统变量允许的,并且受 MySQL 实例支持。

checksum: [true|false]

如果启用,在转储时,将生成一个元数据文件 @.checksums.json,其中包含复制的校验和数据,从而实现数据验证。

如果在复制过程中 checksum: true,则适用以下条件

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

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

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

如果启用,实用程序将在加载相应数据后检查生成的校验和数据。验证仅限于转储的数据,忽略生成的隐藏主键等数据。

如果校验和不匹配或缺少表并且无法验证,则会返回错误。

如果 checksum: true 但没有加载数据,无论是由于 loadData: false 还是没有转储数据,实用程序都会根据受影响表的当前内容验证转储的校验和信息。

  • 如果表不存在,则会为每个缺少的表显示错误。

  • 如果 checksum: truedryRun: true,则不会验证校验和。将显示一条消息,指出没有进行验证。

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,则忽略此选项。

schema: "string"

要将复制模式的内容加载到的目标模式。

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

此加载选项支持单模式复制,或支持导致单模式的过滤选项。也就是说,如果您使用 copyInstance 将数据复制到新实例,则可以在源仅包含一个模式或定义的过滤器导致单个模式被复制到目标时,将所有数据复制到单个模式中。

skipBinlog: [ true | false ]

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

ignoreVersion: [ true | false ]

即使复制数据的源的主要版本号与目标的主要版本号不连续,例如 5.6 到 8.1,也要复制。默认值为 false,这意味着如果主要版本号不同,则会发出错误并停止复制。当此选项设置为 true 时,将发出警告并继续复制。请注意,只有当复制的模式与新的主要版本没有兼容性问题时,复制才会成功。

注意

在连续的主要版本之间复制,例如从 5.7 到 8.1,不需要 ignoreVersion

在尝试使用 ignoreVersion 选项进行复制之前,请使用 MySQL Shell 的升级检查器实用程序 checkForServerUpgrade() 检查源实例并在尝试复制之前修复实用程序识别出的任何兼容性问题。

ignoreExistingObjects: [ true | false ]

即使复制包含目标实例中已经存在的对象,也要复制。默认值为 false,这意味着当找到重复对象时,会发出错误并停止复制。当此选项设置为 true 时,会报告重复对象,但不会生成错误,复制将继续。应谨慎使用此选项,因为实用程序不会检查目标 MySQL 实例中对象的內容与转储文件中的內容是否不同,因此最终复制可能包含不正确或无效的数据。另一种策略是使用 excludeTables 选项排除已经复制的表,您已经验证转储文件中的对象与目标 MySQL 实例中的导入对象相同。最安全的选择是在重新启动复制之前从目标 MySQL 实例中删除重复对象。

handleGrantErrors: [ abort | drop_account | ignore ]

在与 GRANTREVOKE 相关的错误发生时采取的操作。

  • abort: (默认)停止复制过程并显示错误。

  • drop_account: 删除帐户并继续复制过程。

  • ignore: 忽略错误并继续复制过程。

maxBytesPerTransaction: number

可以在单个 LOAD DATA 语句中从数据块复制的最大字节数。如果数据文件超过 maxBytesPerTransaction 值,则多个 LOAD DATA 语句将从该文件中以小于或等于 maxBytesPerTransaction 值的块加载数据。

可以使用单位后缀 k 表示千字节、M 表示兆字节和 G 表示吉字节。最小值为 4096 字节。如果指定了更小的值,则会抛出异常。如果未设置 maxBytesPerTransaction 选项,则使用 bytesPerChunk 值。

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

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

sessionInitSql: list of strings

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

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

如果在运行 SQL 语句时发生错误,复制将停止并返回错误消息。

tzUtc: [ true | false ]

在复制开始时包含一条语句,将时区设置为 UTC。输出中的所有时间戳数据都将转换为此时区。默认值为 true。将时区设置为 UTC 有助于在时区不同的服务器之间移动数据,或处理具有多个时区的数据集。如果您希望保留原始时间戳,请将此选项设置为 false

chunking: [ true | false ]

启用 (true) 或禁用 (false) 表数据的块分割,这将把每个表的 data 分割成多个文件。默认值为 true。使用 bytesPerChunk 指定块大小。如果您将块分割选项设置为 false,则不会进行块分割,实用程序会为每个表创建一个 data 文件。

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

bytesPerChunk: "string"

设置启用块分割时写入每个 data 文件的大致字节数。可以使用 k 表示千字节、M 表示兆字节和 G 表示千兆字节的单位后缀。默认值为 64 MB (64M),最小值为 128 KB (128k)。指定此选项会隐式将 chunking 设置为 true

loadIndexes: [ true | false ]

创建 (true) 或不创建 (false) 表的二级索引。默认值为 true。当此选项设置为 false 时,在导入期间不会创建二级索引,您必须之后创建它们。如果您要分别加载 DDL 文件和 data 文件,并且希望在加载 DDL 文件后更改表结构,这将非常有用。之后,您可以通过再次运行转储加载实用程序来创建二级索引,将 loadIndexes 设置为 true,并将 deferTableIndexes 设置为 all

MySQL Shell 使用 MySQL 服务器的并行索引创建。表中的所有索引都会同时添加。

有关限制和配置,请参见 为联机 DDL 操作配置并行线程

deferTableIndexes: [ off | fulltext | all ]

将二级索引的创建延迟到表 data 加载之后。这可以缩短加载时间。 off 表示所有索引都在表加载期间创建。默认设置 fulltext 仅延迟全文索引。 all 延迟所有二级索引,并且仅在表加载期间创建主键,以及为包含自增值的列定义的索引。

analyzeTables: [ off | on | histogram ]

加载表后,为表执行 ANALYZE TABLEon 分析所有表,histogram 仅分析在转储中存储了直方图信息的表。默认值为 off。即使 data 已加载,您也可以使用此选项运行转储加载实用程序来分析表。

updateGtidSet: [ off | append | replace ]

将源 MySQL 实例中的 gtid_executed GTID 集(如转储元数据中记录的那样)应用于目标 MySQL 实例上的 gtid_purged GTID 集。 gtid_purged GTID 集保存已在服务器上应用但不在服务器上任何二进制日志文件中存在的、所有事务的 GTID。默认值为 off,表示不应用 GTID 集。

当目标 MySQL 实例上运行群组复制时,请勿使用此选项。

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

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

您也可以对来自 MySQL 8.0 的目标 MySQL 实例使用 replace,以用源 MySQL 实例中的 gtid_executed GTID 集替换目标 MySQL 实例上的 gtid_purged GTID 集。要执行此操作,源 MySQL 实例中的 gtid_executed GTID 集必须是目标 MySQL 实例上 gtid_purged GTID 集的超集,并且不得与目标的 gtid_executed GTID 集中不存在于其 gtid_purged GTID 集中的事务集相交。

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

要应用 GTID 集,在导入后,使用 MySQL Shell 的 \sql 命令(或进入 SQL 模式)在连接的 MySQL 实例上发出以下语句,从转储元数据中 @.json 转储文件的 gtidExecuted 字段中复制 gtid_executed GTID 集

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

此语句(适用于 MySQL 8.0 及更高版本)将源 MySQL 服务器实例的 gtid_executed GTID 集添加到目标 MySQL 实例的 gtid_purged GTID 集。对于 MySQL 5.7,必须省略加号 (+),并且目标 MySQL 实例上的 gtid_executedgtid_purged GTID 集必须为空。有关更多详细信息,请参见目标 MySQL 实例版本中 gtid_purged 系统变量的说明。

compatibility: array of strings

对复制中的所有表应用与 HeatWave Service 的兼容性相关的指定要求,根据需要更改转储文件。

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

force_innodb

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

skip_invalid_accounts

删除使用外部身份验证插件创建的、HeatWave Service 不支持的用户帐户。此选项还会删除未设置密码的用户帐户,但以下情况除外:如果未设置密码的帐户被标识为角色,则将使用 CREATE ROLE 语句复制它。

strip_definers

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

strip_restricted_grants

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

strip_tablespaces

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

ignore_missing_pks

使实例、模式或表复制实用程序在执行转储时忽略任何丢失的主键。使用此修改创建的转储不能加载到 HeatWave Service 高可用性实例中,因为 HeatWave Service 高可用性需要主键,它使用群组复制。要自动添加丢失的主键,请使用 create_invisible_pks 修改,或考虑在源服务器上的表中创建主键。

ignore_wildcard_grants

如果启用,则忽略对包含通配符的模式的授权产生的错误,这些模式在启用 partial_revokes 系统变量的系统中解释不同。

strip_invalid_grants

如果启用,则剥离在复制用户时会导致失败的授权语句。例如,引用不存在的特定例程的授权。

create_invisible_pks

为每个没有主键的表添加不可见列中的主键。此修改允许将一些缺少主键的表加载到 HeatWave Service 高可用性实例中。HeatWave Service 高可用性需要主键,它使用组复制。

此修改不会更改数据,因为在复制工具处理这些表之前,这些表不包含不可见列。不可见列(名为“my_row_id”)不会影响使用上传表的应用程序。

过滤选项

where: {"schemaName.tableName": "string"}

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

注意

SQL 仅在执行时验证。如果您要复制许多表,任何与 SQL 语法相关的错误只会出现在流程的后期。因此,建议您在将 SQL 条件用于长时间运行的导出流程之前先对其进行测试。

partitions: {schemaName.tableName: ["string","string",..]}

一个键值对,包含一个有效的表标识符(格式为 schemaName.tableName)和一个有效分区列表。

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

ddlOnly: [ true | false ]

将此选项设置为 true 仅包含复制项的 DDL 文件,而不复制数据。默认值为 false

dataOnly: [ true | false ]

将此选项设置为 true 仅包含复制项的数据文件,而不包含 DDL 文件。默认值为 false

users: [ true | false ]

(仅实例复制工具) 在复制中包含 (true) 或排除 (false) 用户及其角色和授权。默认值为 true。模式和表复制工具不会在复制中包含用户、角色或授权。

您可以使用 excludeUsersincludeUsers 选项指定要从复制中排除或包含的单个用户帐户。

注意

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

excludeUsers: 字符串数组

(仅实例复制工具) 从复制中排除指定的用户名帐户。用于排除无法导入到 HeatWave Service 数据库系统或已存在于目标 MySQL 实例或不需要的目标 MySQL 实例中的用户名帐户。为定义了用户名和主机名的帐户,在 "'user_name'@'host_name'" 格式中指定每个用户名帐户字符串,或者为仅定义了用户名的帐户,在 "'user_name'" 格式中指定每个用户名帐户字符串。如果您没有提供主机名,则所有具有该用户名的帐户都将被排除。

includeUsers: 字符串数组

(仅实例复制工具) 仅在复制中包含指定的用户名帐户。为 excludeUsers 选项指定每个用户名帐户字符串。如果复制中只需要几个用户名帐户,则可以用作 excludeUsers 的替代方案。您也可以同时指定这两个选项,以包含一些帐户并排除其他帐户。

excludeSchemas: 字符串数组

(仅实例复制工具) 从复制中排除指定的模式。请注意,information_schemamysqlndbinfoperformance_schemasys 模式始终从实例复制中排除。

includeSchemas: 字符串数组

(仅实例复制工具) 仅在复制中包含指定的模式。您无法通过在此选项中命名它们来包含 information_schemamysqlndbinfoperformance_schemasys 模式。如果您要复制一个或多个这些模式,可以使用模式复制工具 util.copySchemas() 来执行此操作。

excludeTables: 字符串数组

(实例和模式复制工具) 从复制中排除指定的表(DDL 和数据)。表名必须用有效的模式名限定,如果需要,用反引号字符引用。请注意,mysql.apply_statusmysql.general_logmysql.schemamysql.slow_log tables 的数据始终从模式复制中排除,尽管其 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 参数设置为一个空数组。

triggers: [ true | false ]

(所有复制工具) 在复制中包含 (true) 或排除 (false) 每个表的触发器。默认值为 true

excludeTriggers: 字符串数组

(所有复制工具) 从复制中排除指定的触发器。触发器的名称必须用有效的模式名和表名限定 (schema.table.trigger),如果需要,用反引号字符引用。您可以通过在此选项中指定模式名和表名 (schema.table) 来排除特定表的所以触发器。

includeTriggers: 字符串数组

(所有复制工具) 仅在复制中包含指定的触发器。触发器的名称必须用有效的模式名和表名限定 (schema.table.trigger),如果需要,用反引号字符引用。您可以通过在此选项中指定模式名和表名 (schema.table) 来包含特定表的所以触发器。

示例

以下示例演示了如何使用复制工具

  • 将实例从本地复制到 HeatWave Service 高可用性数据库系统

    JS> util.copyInstance('mysql://User001@DBSystemIPAddress',{threads: 6, deferTableIndexes: "all", 
        compatibility: ["strip_restricted_grants", "strip_definers", "create_invisible_pks"]})

    此示例将实例复制到数据库系统,使用用户名 User001 以及一系列兼容性选项,这些选项使实例与数据库系统兼容。包含 create_invisible_pks 是因为高可用性数据库系统使用组复制,组复制要求每个表都有一个主键。此选项将向每个表添加一个不可见主键。

  • 将模式复制到目标实例并重命名模式

    util.copySchemas(['sakila'], 'user@localhost:4101',{schema: "mySakilaSchema"})

    此示例将模式中的内容从源复制到目标 (localhost:4101) 上具有不同名称的模式。

  • 将表从模式复制到目标上的另一个模式

    util.copyTables('sakila', ['actor'], 'root@localhost:4101',{schema: "mySakilaSchema"})

    此示例将 actor 表从 sakila 模式复制到目标 (localhost:4101) 上的 mySakilaSchema