将对象复制到备用群集
您可以在组织中将表和架构从一个数据库复制到备用数据库。例如,要在测试、临时和生产群集之间复制表和架构,您可能需要使用对象复制。此外,在发生重要更改(例如加载数据)之后,您可立即复制某些对象,而无需等待下一个计划作业。
您使用 vbr replicate
任务来执行对象复制。
该复制操作不会复制所有对象类型。复制期间未复制的编录对象包括:
-
用户和角色
-
授权
-
访问策略(列和行)
-
客户端身份验证和配置文件
要复制整个数据库,请使用
copycluster
任务,然后使用 replicate
任务来更新表和架构,而不是执行另一次完整复制。
备用数据库复制的优势
复制对象通常比导出和导入对象的速度更快。第一次复制对象时会复制整个对象。后续复制操作仅复制自上次复制之后发生更改的数据。Vertica 会复制截至目标数据库当前时期的数据。与 cron 作业一起使用,您可以复制关键对象以创建备份数据库。
在目标数据库出现故障或您计划复制整个数据库的情况下,Vertica 建议您尝试将数据库复制到其他群集。
DOWN 节点如何影响复制
如果源数据库或目标数据库中的某些节点已关闭,只要这些节点本身仍然可用,您就可以复制对象。此处的 DOWN 节点是指节点上正在关闭、但网络上仍可见的 Vertica 进程。
DOWN 节点对复制任务的影响取决于这些节点处于源数据库还是目标数据库中。
复制到备用数据库的步骤
要将对象复制到备用数据库,请从源数据库开始操作,并完成以下步骤:
-
验证复制要求
-
编辑 vbr 配置文件
-
复制对象
-
监控对象复制
验证复制要求
以下要求适用于源数据库和目标数据库:
-
它们具有与 dbadmin 帐户关联的相同 Linux 用户。
-
两者中的所有节点都必须为 UP 状态。
-
在 Enterprise 模式中,它们具有相同数量的节点。
-
在 Eon 模式中,两个数据库的主子群集具有相同的节点子订阅数。目标数据库与源数据库的主子群集具有相同数量(或更多)的节点。
-
源群集数据库管理员无需密码,即可通过 SSH 登录所有节点。
注意
在群集内执行免密码访问与在群集之间执行免密码访问不同。源群集和目标群集上的管理员帐户的 SSH ID 可能不一样。您必须配置目标群集中的每个主机,才能接受源群集的 SSH 身份验证。编辑 vbr 配置文件以进行复制
将以下参数添加到用于复制对象的配置文件中:
-
在 [misc] 部分中,添加以下参数:
; Identify the objects that you want to replicate objects = schema.objectName
-
在 [misc] 部分中,设置唯一的快照名称。复制任务可以与其他某些 vbr 任务同时运行,但前提是快照名称必须不同。
snapshotName = name
-
在 [database] 部分中,设置以下参数:
; parameters used to replicate objects between databases dest_dbName = dest_dbUser = dest_dbPromptForPassword =
如果使用的是存储密码,请确保在密码配置文件中配置
dest_dbPassword
参数。 -
在 [mapping] 部分中,将源节点映射到目标主机:
[Mapping] v_source_node0001 = targethost01 v_source_node0002 = targethost02 v_source_node0003 = targethost03
复制对象
要复制对象,请使用 vbr replicate
任务:
vbr -t replicate -c configfile.ini
replicate
任务可以在任一方向上与备份和对象复制任务同时运行。复制不能与要求关闭数据库的任务(完整还原和 copycluster)同时运行。每个并发任务必须具有唯一的快照名称。因此,作为最佳实践,请为每个对象复制创建一个单独的配置文件。如果需要许多表,请考虑复制架构,而不是单个表。
Vertica 支持将对象复制和还原到目标数据库,但最多支持比当前数据库版本晚一个次要版本。例如,您可以将对象从 11.0.x 数据库复制或还原到 11.1.x 数据库。不同版本的还原或复制过程与相同版本的过程相同。
注意
此功能仅在还原和复制对象时适用。如果还原或复制的对象需要数据库中不存在的更高版本的 UDx 库,Vertica 将显示以下错误:
ERROR 2858: Could not find function definition
通过在目标数据库中安装兼容库,您可以解决此问题。
监控对象复制
您可以使用以下方式监控对象复制:
-
查看源数据库中的 vbr 日志
-
检查源数据库和目标数据库的数据库日志
-
在源数据库中查询 REMOTE_REPLICATION_STATUS