Hubble的设计具有很高的容错性,所以这些备份主要是为灾难恢复而设计的。如果集群丢失了大部分节点,可通过数据备份恢复。而少部分节点出现问题是不需要任何干预的。
您可以从备份中恢复整个表(包括其索引)或视图。此过程使用存储在备份中的数据在目标数据库中创建全新的表或视图。恢复数据库只是恢复属于数据库的所有表和视图,但不创建数据库。
因为这个过程是为灾难恢复而设计的,所以需要这些表当前不存在于目标数据库中。这意味着目标数据库必须没有需要恢复的表或视图同名的表或视图。可以做以下工作:
DROP TABLE
, DROP VIEW
, DROP SEQUENCE
,然后在使用数据恢复功能。需要注意序列在列的默认表达式中使用时不能被删除,因此必须在删除序列之前删除那些表达式,并在重新创建序列之后重新创建它们。可以使用setval函数将序列的值设置为以前的值。根据所包含的备份文件,您可以从完全备份进行恢复,也可以从带有增量备份的完全备份进行恢复
全量恢复:只包含到完整备份的路径
增量恢复:包括作为第一个参数的完整备份路径,以及作为以下参数的从旧备份到最新备份的后续增量备份。
在成功启动恢复后,它将成为一个job任务,您可以使用SHOW JOBS
来查看。
启动恢复之后,您可以使用PAUSE JOB
、RESUME JOB
和CANCEL JOB
对任务进行操作。
如表存在外键约束,序列,视图,交错表。必须同时备份其依赖的对象。
对象 | 依赖对象 |
---|---|
有外键约束的表 | 所关联的表。同时,可以在数据恢复期间将其删除 |
有序列的表 | 所使用的序列。同时,可以在数据恢复期间将其删除 |
视图 | 视图定义使用到的表 |
交错表 | 交错关系中的父表 |
每个备份的路径必须是唯一的,备份的目的地/位置的URL必须使用以下格式:
[scheme]://[host]/[path]?[parameters]
类型 | schema | host | 参数 | 示例 |
---|---|---|---|---|
http | http | 主机地址 | N/A | http://localhost:8080/mydatest.sql |
NFS/Local | nodelocal | 节点ID或为空 | N/A | nodelocal:///path/mydatest,nodelocal://2/path/mydatest |
可以将以下选项,用以控制恢复进程的行为。
参数 | 描述 | 示例 |
---|---|---|
into_db | 如果希望将表或视图还原到数据库中,而不是它原来所在的数据库中,则可以更改目标数据库。如果您希望恢复当前存在的表,但又不想删除它,那么这是非常有用的。 | WITH into_db = 'newdb' |
skip_missing_foreign_keys | 如果希望恢复具有外键的表,但不希望恢复它引用的表,则可以从表中删除外键约束,然后恢复它。 | WITH skip_missing_foreign_keys |
skip_missing_sequences | 如果希望还原依赖于序列的表,但不希望还原它引用的序列,则可以从表中删除序列依赖项 | WITH skip_missing_sequences |
skip_missing_views | 如果您想要还原具有视图的表,但又不想还原视图的依赖项,您可以删除视图,然后恢复表。 | WITH skip_missing_views |
RESTORE icheck.customers FROM 'http://database-icheck-2019-01-11-weekly';
RESTORE icheck.customers, icheck.accounts FROM 'http://database-icheck-2019-01-11-weekly';
RESTORE DATABASE icheck FROM 'http://database-icheck-2019-01-11-weekly';
RESTORE icheck.customers FROM 'http://database-icheck-2019-01-11-weekly'
AS OF SYSTEM TIME '2019-01-11 10:00:00';
RESTORE icheck.customers
FROM 'http://database-icheck-2019-01-11-weekly', 'http://database-icheck-2019-01-12-daily', 'http://database-icheck-2019-01-13-daily';
默认情况下,表和视图被恢复到它们原来所属的数据库。但是,使用into_db选项,您可以控制目标数据库。
RESTORE icheck.customers
FROM 'http://database-icheck-2019-01-11-weekly'
WITH into_db = 'newdb';
默认情况下,具有外键约束的表必须与它们引用的表同时恢复。但是,使用skip_missing_foreign_keys选项可以从表中删除外键约束,然后再恢复。
RESTORE icheck.accounts
FROM 'http://database-icheck-2019-01-11-weekly'
WITH skip_missing_foreign_keys;
system.users
表存储集群的用户名及其散列密码。要恢复它们,需要将system.users
表恢复到新数据库中,因为您不能删除现有的system.users
表。
在将其恢复到新数据库之后,可以将恢复的用户表数据写入集群的现有system.users
表。
RESTORE system.users
FROM 'http://database-icheck-2019-01-11-weekly'
WITH into_db = 'newdb';
INSERT INTO system.users SELECT * FROM newdb.users;
DROP TABLE newdb.users;