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

11.7 复制实例、模式和表

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

关于实用程序

复制实用程序使您能够在 MySQL 实例之间复制 DDL 和数据,而无需中间存储。数据从源到目的地进行流式传输。

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

可以从源复制到 HeatWave 服务 DB 系统。如果将 DB 系统定义为目标,则该实用程序会默认检测到这一点并启用 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 服务器版本的通用可用性 (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 存储引擎。如果将 DB 系统定义为目标,则该实用程序会检测到这一点,默认情况下启用 HeatWave 服务兼容性检查,并检查源中发现的任何异常,以及 compatibility 选项会更改复制以将其他存储引擎替换为 InnoDB

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

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

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

    有关更多信息,请参见 HeatWave 服务和 Oracle 云基础设施选项

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

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

  • 如果源是 MySQL 5.7,目标是 DB 系统,则会自动运行 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。

复制实用程序需要两倍于线程数的线程,一个线程用于复制,一个线程用于写入。如果线程设置为 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:false 并且 chunking:true,则会为每个复制的表和分区块生成校验和。

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

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

如果启用,实用程序将在加载相应数据后检查生成的校验和数据。验证仅限于已转储的数据,忽略生成的元数据,例如不可见的 primary key。

如果校验和不匹配或表格丢失且无法验证,则会返回错误。

如果 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 启动。当所有线程都启动其事务后,实例将被锁定以进行备份(如 锁定实例以进行备份和解除实例锁定语句 中所述),并且全局读锁将被释放。

如果用户帐户没有 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 实例,如果您要应用 gtid_executed GTID 集(来自源 MySQL 实例)到目标 MySQL 实例上,则始终将 skipBinlog 设置为 true,无论是使用 updateGtidSet 选项还是手动操作。当目标 MySQL 实例上使用 GTID 时 (gtid_mode=ON),将此选项设置为 true 将阻止在执行导入时生成和分配新的 GTID,以便可以使用来自源服务器的原始 GTID 集。用户帐户必须具有设置 sql_log_bin 系统变量所需的权限。

ignoreVersion: [ true | false ]

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

注意

在连续的 major 版本之间进行复制时,无需使用 ignoreVersion,例如 5.7 到 8.1。

在尝试使用 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 文件后更改表结构,这将很有用。之后,您可以通过再次运行 dump 加载实用程序来创建二级索引,将 loadIndexes 设置为 true,并将 deferTableIndexes 设置为 all

MySQL Shell 使用 MySQL Server 的并行索引创建。表中的所有索引都是同时添加的。

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

deferTableIndexes: [ off | fulltext | all ]

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

analyzeTables: [ off | on | histogram ]

在表加载完毕之后,为表执行 ANALYZE TABLEon 分析所有表,而 histogram 仅分析在 dump 中存储有直方图信息的表。默认值为 off。即使数据已经加载,也可以使用此选项运行 dump 加载实用程序来分析表。

updateGtidSet: [ off | append | replace ]

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

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

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

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

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

对于 MySQL 5.7 上的目标 MySQL 实例,请将选项设置为 replace,该选项将目标 MySQL 实例上的 gtid_purged GTID 集替换为源 MySQL 实例中的 gtid_executed GTID 集。在 MySQL 5.7 中,要做到这一点,目标 MySQL 实例上的 gtid_executedgtid_purged GTID 集必须为空,因此实例必须未被使用,并且没有先前导入的 GTID 集。

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

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

此语句(从 MySQL 8.0 开始有效)将源 MySQL Server 实例的 gtid_executed GTID 集添加到目标 MySQL 实例的 gtid_purged GTID 集。对于 MySQL 5.7,必须省略加号 (+),并且目标 MySQL 实例上的 gtid_executedgtid_purged GTID 集必须为空。有关更多详细信息,请参阅目标 MySQL 实例版本中对 gtid_purged 系统变量的描述。

compatibility: array of strings

对复制中的所有表应用与 HeatWave Service 兼容的指定要求,并根据需要修改 dump 文件。

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

force_innodb

CREATE TABLE 语句更改为使用 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

使实例、架构或表复制实用程序在执行 dump 时忽略任何缺少的主键。使用此修改创建的 dump 无法加载到 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")不会影响使用已上传表的应用程序。

过滤选项

其中:{"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 表 的数据始终从模式复制中排除,尽管它们的 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