CockroachDB-备份与恢复(6)RESTORE命令

RESTORE语句从存储在AWS S3、谷歌云存储或NFS等服务上的备份中恢复集群的模式和数据。
因为cockachdb设计了高容错性,恢复主要是为灾难恢复设计的,也就是说,如果集群丢失了大部分节点,则重新启动集群。孤立的问题(如小规模节点中断)不需要任何干预。
您可以恢复:

  • 一个完整的集群
  • 数据库

考虑因素

RESTORE不能恢复由新版本的cockachdb所做的备份。
RESTORE是一个阻塞语句。要异步运行恢复作业,请使用DETACHED选项。
恢复之前目标集群上的区域配置将在使用备份集群中的区域配置进行集群恢复时被覆盖。如果在进行备份时集群上没有定制的分区配置,那么在恢复之后,目标集群将使用RANGE DEFAULT配置中的分区配置。
当在表上设置exclude_data_from_backup参数时,该表在恢复时将不包含行数据。

参数

参数描述
table_pattern要恢复的表或视图。
database_name您想要恢复的数据库的名称(即,恢复数据库中的所有表和视图)。只有备份了整个数据库,才能恢复整个数据库。
collectionURI存储完全备份(以及附加的增量备份,如果适用)的集合URI。
LATEST恢复给定集合URI中最近的备份。
subdirectory从给定集合URI中的特定子目录恢复。
localityURI存储位置感知备份的URI。从增量的位置感知备份进行恢复时,需要包括曾经使用过的每个位置,即使它只使用过一次。
AS OF SYSTEM TIME timestamp恢复数据到一个存在的时间戳。只有在使用修订历史进行了完整备份或增量备份时,才能恢复某个时间点的数据
restore_options_list使用这些选项控制备份的行为

其他选项

您可以使用restore_options_list中的以下任何选项来控制RESTORE行为。要设置多个RESTORE选项,请使用逗号分隔的列表:

参数描述
into_dbDatabase name用于更改表恢复的目标数据库。在使用into_db进行恢复之前,目标数据库必须存在。(不适用于数据库或集群恢复。)示例:WITH into_db = ‘newdb’
new_db_nameDatabase name在恢复期间重命名数据库。当使用不同的名称恢复相同的数据库时,现有的备份数据库可以保持活动状态。示例:RESTORE DATABASE move…WITH new_db_name = ‘new_movr’
skip_missing_foreign_keysN/A用于在恢复之前删除缺失的外键约束。例如:WITH skip_missing_foreign_keys
skip_missing_sequencesN/A用于忽略序列相关性(例如,使用序列的DEFAULT表达式)。示例:WITH skip_missing_sequences
skip_missing_sequence_ownersN/A在恢复以前是序列所有者的表或以前由表拥有的序列时,必须使用。例如:WITH skip_missing_sequence_owners
skip_missing_viewsN/A用于跳过恢复无法恢复的视图,因为它们的依赖关系没有同时被恢复。例如:WITH skip_missing_views
skip_localities_checkN/A当备份的集群和目标集群之间存在不匹配的集群区域时,用于在恢复之前跳过检查集群的位置。例如:WITH skip_localities_check
encryption_passphrasePassphrase used to create theencrypted backup用于解密由BACKUP语句加密的文件的口令。
DETACHEDN/A当RESTORE与DETACHED一起运行时,作业将异步执行。恢复作业创建完成后返回作业ID。注意,如果指定了DETACHED,则不会返回进一步的作业信息和作业完成状态。有关返回作业数据之间差异的更多信息,请参见下面的示例。要检查作业状态,请使用SHOW JOBS语句。要在事务中运行恢复,请使用DETACHED选项。
debug_pause_on“error”用于使RESTORE作业在遇到错误时自我暂停。然后,可以在修复错误或取消错误后恢复RESTORE作业,以回滚作业。示例:WITH debug_pause_on=‘error’
incremental_locationSTRING从备份最初使用的备用集合URI恢复增量备份。

功能细节

RESTORE将只恢复对象(表、数据库、集群)中的最新数据,或者根据as OF SYSTEM TIME恢复最新数据。也就是说,即使使用revision_history运行备份,还原也不包括历史数据。这意味着,如果对恢复的对象发出AS OF SYSTEM TIME查询,查询将失败或响应将不正确,因为没有可查询的历史数据。例如,如果您恢复了在2022-07-13 10:38:00的表,那么就不可能读取或备份在2022-07-13 10:37:00或更早的表。对于带有revision_history的备份也是如此,它可能会尝试在早于2022-07-13 10:38:00之前启动修订开始时间。

完整集群

全集群恢复只能在没有用户创建的数据库或表的目标集群上运行。恢复全集群包括:
所有用户表
相关系统表
所有数据库
所有表(自动包含它们的索引)
所有视图
v22.1新版功能:此外,全集群恢复将:
在全集群恢复期间将临时表恢复到它们的原始数据库。
在恢复开始之前,删除集群的defaultdb和postgres预加载数据库。如果defaultdb和postgres在原始备份中存在,则只能恢复它们。

数据库

恢复数据库将创建一个新数据库并恢复其所有表和视图。创建的数据库将在备份中具有数据库的名称。
RESTORE DATABASE backup_database_name FROM LATEST in ‘your_backup_collection_URI’;
v22.1新增功能:要恢复集群中已经存在的数据库,使用new_db_name选项和restore一起为数据库提供新名称。

还可以从备份中恢复单个表(自动包含其索引)或视图。该过程使用备份中存储的数据在目标数据库中创建全新的表或视图。
默认情况下,将表和视图恢复到与备份它们的数据库名称匹配的目标数据库中。如果目标数据库不存在,则必须创建它。您可以使用into_db选项来选择更改目标数据库。
目标数据库的表或视图不能与要恢复的表或视图同名。如果正在使用任何恢复目标的名称,您可以:
删除表,删除视图,或删除序列,然后恢复它们。注意,在列的DEFAULT表达式中使用序列时,序列不能被删除,因此这些表达式必须在序列被删除之前删除,并在序列被重新创建之后重新创建。setval函数可用于将序列的值设置为之前的值。
将表或视图恢复到不同的数据库中。

性能

RESTORE过程通过将工作分配到所有节点,将其对集群性能的影响降到最低。恢复数据的子集(称为范围)均匀分布在随机选择的节点中,每个范围最初只恢复到一个节点。一旦范围恢复,节点开始复制它其他。
当执行RESTORE操作失败或取消时,将正确清理恢复的部分数据。这可能会对集群性能产生轻微的、暂时的影响。
v22.1新增功能:如果集群中的某个节点耗尽磁盘空间,则恢复任务将暂停。有关恢复和显示恢复作业进度的信息,请参见查看和控制恢复作业。
v22.1新增功能:如果恢复作业在重试次数达到最大次数后继续遇到瞬时错误,则恢复作业将暂停,而不是进入失败状态。一旦恢复暂停,您可以恢复或取消它。

示例

恢复最近备份

RESTORE FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}';

恢复指定备份

RESTORE FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}';

恢复集群

RESTORE FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}';

恢复数据库

RESTORE DATABASE bank FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}';

恢复表

RESTORE TABLE bank.customers FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}';

从增量恢复
从增量备份恢复时,将恢复整个表、数据库或集群。在此过程中,cockachdb同时使用最新的(或特定的)增量备份和完全备份。如果没有完全备份,则不能恢复增量备份。此外,不可能使用现有数据对表、数据库或集群进行恢复。

RESTORE DATABASE bank FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}';

异步恢复

RESTORE FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}'
WITH DETACHED;

恢复到不同的database

RESTORE bank.customers FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}'
WITH into_db = 'newdb';

恢复重命名db

RESTORE bank.customers FROM LATEST IN 's3://{bucket_name}?AWS_ACCESS_KEY_ID={key_id}&AWS_SECRET_ACCESS_KEY={access_key}'
WITH into_db = 'newdb';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值