天天看点

大数据:Starrocks 备份/恢复操作流程(hdfs)

作者:明少三年

导语

总体流程可归纳如下:

  1. 先创建云端仓库用于备份与恢复(新老集群都要创建云端仓库, REPOSITORY 名字要相同, brokerName 需要对应集群的 broker 名称);
  2. 在老集群准备好需要进行迁移备份的表, backup 到云端仓库;
  3. 再从云端仓库 restore 到新集群。
  4. 新集群当中不用事先创建好需要备份恢复的表,因为在进行 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"
);           

说明:

  1. 一个集群可以创建多个仓库。只有拥有 ADMIN 权限的用户才能创建仓库。
  2. 任何用户都可以通过 SHOW REPOSITORIES; 命令查看已经创建的仓库。
  3. 在做数据迁移操作时,需要在源集群和目的集群创建完全相同的仓库,以便目的集群可以通过这个仓库,查看到源集群备份的数据快照。
  • 备份数据到云端仓库

说明:

  1. 该语句用于备份指定数据库下的数据。该命令为异步操作。提交成功后,需通过 SHOW BACKUP 命令查看进度。仅支持备份 OLAP 类型的表。
  2. 同一数据库下只能有一个正在执行的 BACKUP 或 RESTORE 任务。
  3. 备份操作会备份指定表或分区的基础表及物化视图,并且仅备份一副本。
  4. 备份操作的效率取决于数据量、Compute Node 节点数量以及文件数量。备份数据分片所在的每个 Compute Node 都会参与备份操作的上传阶段。节点数量越多,上传的效率越高,文件数据量只涉及到的分片数,以及每个分片中文件的数量。如果分片非常多,或者分片内的小文件较多,都可能增加备份操作的时间。
  5. ON 子句中标识需要备份的表和分区。如果不指定分区,则默认备份该表的所有分区。
  6. EXCLUDE 子句中标识不需要备份的表和分区。备份除了指定的表或分区之外这个数据库中所有表的所有分区数据。
  7. 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 任务。

输出的各列含义如下:

大数据:Starrocks 备份/恢复操作流程(hdfs)
  • 恢复云端数据到集群

确认完快照信息后到新集群进行恢复操作,该语句用于将之前通过 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"
);           

说明:

  1. 同一数据库下只能有一个正在执行的恢复操作。
  2. 可以将仓库中备份的表恢复替换数据库中已有的同名表,但须保证两张表的表结构完全一致。表结构包括:表名、列、分区、物化视图等等。
  3. 当指定恢复表的部分分区时,系统会检查分区范围是否能够匹配。
  4. 恢复操作的效率:在集群规模相同的情况下,恢复操作的耗时基本等同于备份操作的耗时。如果想加速恢复操作,可以先通过设置 replication_num 参数,仅恢复一个副本,之后在通过调整副本数:ALTER TABLE将副本补齐。
  5. 如果需要取消正在执行的RESTORE 任务,可以参考下方的文档指令 取消RESTORE任务。
  • 查看最近恢复的job

SHOW RESTORE FROM 数据库名; 进行查看job任务,到此备份恢复完成。

可简单执行count语句进行新老集群表数据条数对比,或者运用sum函数相加下后面的值看是否相等,来进行校验恢复是否成功。