导语
总体流程可归纳如下:
- 先创建云端仓库用于备份与恢复(新老集群都要创建云端仓库, REPOSITORY 名字要相同, brokerName 需要对应集群的 broker 名称);
- 在老集群准备好需要进行迁移备份的表, backup 到云端仓库;
- 再从云端仓库 restore 到新集群。
- 新集群当中不用事先创建好需要备份恢复的表,因为在进行 restore 操作会自动创建。
操作过程
- 创建REPOSITORY远端仓库
通过 CREATE REPOSITORY 创建远端仓库,该语句用于创建仓库。仓库用于属于备份或恢复。仅 root 或 superuser 用户可以创建仓库。
- 这里以 HDFS 为例
CREATE REPOSITORY `hdfs_RepositoryName`
WITH BROKER `hdfs_broker`
ON LOCATION "hdfs://hadoop-name-node:prot/*******/******/******/"
PROPERTIES
(
"username" = "user",
"password" = "password"
);
说明:
- 一个集群可以创建多个仓库。只有拥有 ADMIN 权限的用户才能创建仓库。
- 任何用户都可以通过 SHOW REPOSITORIES; 命令查看已经创建的仓库。
- 在做数据迁移操作时,需要在源集群和目的集群创建完全相同的仓库,以便目的集群可以通过这个仓库,查看到源集群备份的数据快照。
- 备份数据到云端仓库
说明:
- 该语句用于备份指定数据库下的数据。该命令为异步操作。提交成功后,需通过 SHOW BACKUP 命令查看进度。仅支持备份 OLAP 类型的表。
- 同一数据库下只能有一个正在执行的 BACKUP 或 RESTORE 任务。
- 备份操作会备份指定表或分区的基础表及物化视图,并且仅备份一副本。
- 备份操作的效率取决于数据量、Compute Node 节点数量以及文件数量。备份数据分片所在的每个 Compute Node 都会参与备份操作的上传阶段。节点数量越多,上传的效率越高,文件数据量只涉及到的分片数,以及每个分片中文件的数量。如果分片非常多,或者分片内的小文件较多,都可能增加备份操作的时间。
- ON 子句中标识需要备份的表和分区。如果不指定分区,则默认备份该表的所有分区。
- EXCLUDE 子句中标识不需要备份的表和分区。备份除了指定的表或分区之外这个数据库中所有表的所有分区数据。
- PROPERTIES 目前支持以下属性:(“type” = “full”:表示这是一次全量更新(默认,当前仅支持full);“timeout” = “3600”:任务超时时间,默认为一天。单位秒,最小只能调整为10min。)
- 这里以备份整张表为例(全量备份 example_db 下的表 example_tbl 到仓库 example_repo 中):
BACKUP SNAPSHOT example_db.snapshot_label1
TO example_repo
ON (example_tbl)
PROPERTIES ("type" = "full");
- 查看云端仓库任务
可以通过 SHOW BACKUP FROM example_db; 获得example_db下最后一次BACKUP任务 ,查看云端仓库中已有的备份 ,该记录中仅显示最近一次 的BACKUP 任务。
输出的各列含义如下:
- 恢复云端数据到集群
确认完快照信息后到新集群进行恢复操作,该语句用于将之前通过 BACKUP 命令备份的数据,恢复到指定数据库下。该命令为异步操作。提交成功后,需通过 SHOW RESTORE 命令查看进度。仅支持恢复 OLAP 类型的表。
语法:
RESTORE SNAPSHOT [db_name].{snapshot_name}
FROM `repository_name`
[ON|EXCLUDE] (
`table_name` [PARTITION (`p1`, ...)] [AS `tbl_alias`],
...
)
PROPERTIES ("key"="value", ...);
举例:
RESTORE SNAPSHOT example_db1.`snapshot_1`
FROM `example_repo`
ON ( `backup_tbl` )
PROPERTIES
(
"backup_timestamp"="2023-05-04-10-52-38-380",
"replication_num" = "1"
);
说明:
- 同一数据库下只能有一个正在执行的恢复操作。
- 可以将仓库中备份的表恢复替换数据库中已有的同名表,但须保证两张表的表结构完全一致。表结构包括:表名、列、分区、物化视图等等。
- 当指定恢复表的部分分区时,系统会检查分区范围是否能够匹配。
- 恢复操作的效率:在集群规模相同的情况下,恢复操作的耗时基本等同于备份操作的耗时。如果想加速恢复操作,可以先通过设置 replication_num 参数,仅恢复一个副本,之后在通过调整副本数:ALTER TABLE将副本补齐。
- 如果需要取消正在执行的RESTORE 任务,可以参考下方的文档指令 取消RESTORE任务。
- 查看最近恢复的job
SHOW RESTORE FROM 数据库名; 进行查看job任务,到此备份恢复完成。
可简单执行count语句进行新老集群表数据条数对比,或者运用sum函数相加下后面的值看是否相等,来进行校验恢复是否成功。