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://n/path/mydatest/2023/03/30-010108.31 |
恢复数据的时候要找
BACKUP_MANIFEST
文件,将地址写到与BACKUP_MANIFEST
一致,请看以下示例。
可以将以下选项,用以控制恢复进程的行为。
参数 | 描述 | 示例 |
---|---|---|
skip_missing_foreign_keys | 如果希望恢复具有外键的表,但不希望恢复它引用的表,则可以从表中删除外键约束,然后恢复它。 | WITH skip_missing_foreign_keys |
skip_missing_sequences | 如果希望还原依赖于序列的表,但不希望还原它引用的序列,则可以从表中删除序列依赖项 | WITH skip_missing_sequences |
skip_missing_views | 如果您想要还原具有视图的表,但又不想还原视图的依赖项,您可以删除视图,然后恢复表。 | WITH skip_missing_views |
在恢复表和数据库的时候,会遇见命名冲突的问题,有两种解决形式
建议选用第2种方式
alter database database_name rename to database_bak;
alter table target_database.example_table rename to target_database.archived_example_table;
完成恢复命令后,找到BACKUP_MANIFEST
文件所在位置
[hubble@ty-bj03-test01 30-010108.31]$ pwd
/data/hubble317cyh/extern/backup_tt/2023/03/30-010108.31
执行恢复语句
root@ty-bj03-test01:14432/test> restore test.tt from 'nodelocal://1/backup_tt/2023/03/30-010108.31';
job_id | status | fraction_completed | rows | index_entries | bytes
---------------------+-----------+--------------------+------+---------------+--------
852193907899072513 | succeeded | 1 | 1 | 0 | 16
完整集群还原只能在从未有用户创建的数据库或表的目标集群上运行
restore from 'nodelocal://1/backup/2023/03/30-055845.78';
restore guar.trans from 'nodelocal://1/backup_data/2023/03/30-010108.31';
restore guar.trans,guar.tb_bs from 'nodelocal://1/backup_data/2023/03/30-010108.31';
带有new_db_name
参数,恢复数据时候会生成一个新的数据库
库中不能包含视图,若有视图,则无法指定新的库名
restore database guar from latest in 'nodelocal://1/backup_db/2023/03/30-022407.66' with new_db_name ='guar_db';
restore guar.trans from 'nodelocal://1/backup_datatime/2023/03/30-022457.26' AS OF SYSTEM TIME '-30s';
默认情况下,表和视图被恢复到它们原来所属的数据库。但是,使用into_db选项,您可以控制目标数据库。
restore guar.trans,guar.tb_bs from 'nodelocal://1/backup_data/2023/03/30-021207.04' WITH into_db = 'ora';
默认情况下,具有外键约束的表必须与它们引用的表同时恢复。但是,使用skip_missing_foreign_keys
选项可以从表中删除外键约束,然后再恢复。
restore guar.emp from 'nodelocal://1/backup_data/2023/03/30-324121.03' with skip_missing_foreign_keys;
system.users
表存储集群的用户名及其散列密码。要恢复它们,需要将system.users
表恢复到新数据库中,因为您不能删除现有的system.users
表。
在将其恢复到新数据库之后,可以将恢复的用户表数据写入集群的现有system.users
表。
restore system.users from 'nodelocal://1/backup_users/2023/03/30-104421.14' WITH into_db = 'newdb';
insert into system.users select * from newdb.users;
drop table newdb.users;