本节介绍 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 或更高版本,才能加载复制内容。
实例或模式中的对象名称必须为
latin1
或utf8
字符集。数据一致性仅对使用
InnoDB
存储引擎的表保证。-
用于运行实用程序的用户帐户必须在所有相关模式上拥有以下最小必需权限集:
EVENT
、RELOAD
、SELECT
、SHOW VIEW
和TRIGGER
。如果
consistent
选项设置为true
(默认值),则如果RELOAD
权限不可用,则所有复制表的LOCK TABLES
权限可以替代它。如果用户帐户没有
BACKUP_ADMIN
权限且无法执行LOCK INSTANCE FOR BACKUP
,则实用程序在复制期间会进行额外的 一致性检查。如果此检查失败,则实例复制将停止,但模式复制或表复制将继续并返回错误消息,以提醒用户一致性检查失败。如果
consistent
选项设置为false
,则不需要BACKUP_ADMIN
和RELOAD
权限。
用于运行实用程序的用户帐户需要
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_grants
和strip_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_client
、character_set_connection
和character_set_results
的会话值对于每个连接都设置为该值。字符集必须是character_set_client
系统变量允许的,并且受 MySQL 实例支持。-
checksum: [true|false]
-
如果启用,在转储时,将生成一个元数据文件
@.checksums.json
,其中包含复制的校验和数据,从而实现数据验证。如果在复制过程中
checksum: true
,则适用以下条件如果
ddlOnly:false
且chunking:true
,则为每个复制的表和分区块生成校验和。如果
ddlOnly:false
且chunking:false
,则为每个复制的表和表分区生成校验和。如果
ddlOnly:true
,则为每个复制的表和表分区生成校验和。
如果启用,实用程序将在加载相应数据后检查生成的校验和数据。验证仅限于转储的数据,忽略生成的隐藏主键等数据。
如果校验和不匹配或缺少表并且无法验证,则会返回错误。
如果
checksum: true
但没有加载数据,无论是由于loadData: false
还是没有转储数据,实用程序都会根据受影响表的当前内容验证转储的校验和信息。如果表不存在,则会为每个缺少的表显示错误。
如果
checksum: true
且dryRun: 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 READ
和START 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 ]
-
在与
GRANT
或REVOKE
相关的错误发生时采取的操作。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_limit
或max_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 TABLE
。on
分析所有表,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 实例,当您设置
append
或replace
以更新 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_executed
和gtid_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_executed
和gtid_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 实例上的管理用户帐户本身没有相关的权限,则此选项还会删除系统模式 (mysql
和sys
) 的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"}
-
一个键值对,包含一个有效的表标识符(格式为
)和一个用于过滤要复制数据的有效 SQL 条件表达式。schemaName
.tableName
注意SQL 仅在执行时验证。如果您要复制许多表,任何与 SQL 语法相关的错误只会出现在流程的后期。因此,建议您在将 SQL 条件用于长时间运行的导出流程之前先对其进行测试。
-
partitions: {
schemaName.tableName
: ["string
","string
",..]} -
一个键值对,包含一个有效的表标识符(格式为
)和一个有效分区列表。schemaName
.tableName
例如,要仅复制表
schema.table
中名为p1
和p2
的分区:partitions: {'
schema
.table
':["p1", "p2"]} -
ddlOnly: [ true | false ]
将此选项设置为
true
仅包含复制项的 DDL 文件,而不复制数据。默认值为false
。-
dataOnly: [ true | false ]
将此选项设置为
true
仅包含复制项的数据文件,而不包含 DDL 文件。默认值为false
。-
users: [ true | false ]
-
(仅实例复制工具) 在复制中包含 (
true
) 或排除 (false
) 用户及其角色和授权。默认值为true
。模式和表复制工具不会在复制中包含用户、角色或授权。您可以使用
excludeUsers
或includeUsers
选项指定要从复制中排除或包含的单个用户帐户。注意如果从 MySQL 5.6 实例复制用户,则执行复制的用户必须具有 SUPER 权限。
-
excludeUsers:
字符串数组
(仅实例复制工具) 从复制中排除指定的用户名帐户。用于排除无法导入到 HeatWave Service 数据库系统或已存在于目标 MySQL 实例或不需要的目标 MySQL 实例中的用户名帐户。为定义了用户名和主机名的帐户,在
"'
格式中指定每个用户名帐户字符串,或者为仅定义了用户名的帐户,在user_name
'@'host_name
'""'
格式中指定每个用户名帐户字符串。如果您没有提供主机名,则所有具有该用户名的帐户都将被排除。user_name
'"-
includeUsers:
字符串数组
(仅实例复制工具) 仅在复制中包含指定的用户名帐户。为
excludeUsers
选项指定每个用户名帐户字符串。如果复制中只需要几个用户名帐户,则可以用作excludeUsers
的替代方案。您也可以同时指定这两个选项,以包含一些帐户并排除其他帐户。-
excludeSchemas:
字符串数组
(仅实例复制工具) 从复制中排除指定的模式。请注意,
information_schema
、mysql
、ndbinfo
、performance_schema
和sys
模式始终从实例复制中排除。-
includeSchemas:
字符串数组
(仅实例复制工具) 仅在复制中包含指定的模式。您无法通过在此选项中命名它们来包含
information_schema
、mysql
、ndbinfo
、performance_schema
或sys
模式。如果您要复制一个或多个这些模式,可以使用模式复制工具util.copySchemas()
来执行此操作。-
excludeTables:
字符串数组
(实例和模式复制工具) 从复制中排除指定的表(DDL 和数据)。表名必须用有效的模式名限定,如果需要,用反引号字符引用。请注意,
mysql.apply_status
、mysql.general_log
、mysql.schema
和mysql.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
。