欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Doris数据备份与恢复

程序员文章站 2022-07-08 10:17:21
Doris 支持将当前数据以文件的形式,通过 broker 备份到远端存储系统中,之后可以通过 恢复 命令,从远端存储系统中将数据恢复到任意 Doris 集群。通过这个功能,可以达到两个目的:数据备份:Doris 可以支持将数据定期的进行快照备份数据迁移:Doris 可以根据数据备份的快照将数据恢复到新表或不同集群间的表一、基本原理备份(Backup)备份操作是将指定表或分区的数据,直接以 Doris 存储的文件的形式,上传到远端仓库中进行存储。Backup命令为异步操作,提交成功后需...

目录

一、基本原理

备份(Backup)

恢复(Restore)

二、应用实例

1、创建远程仓库

2、备份BACKUP

Examples:

3、SHOW BACKUP

4、SHOW SNAPSHOT

5、恢复 RESTORE

Examples:

6、SHOW RESTORE

7、CANCEL BACKUP

8、CANCEL RESTORE

9、DROP REPOSITORY

三、注意事项


Doris 支持将当前数据以文件的形式,通过 broker 备份到远端存储系统中,之后可以通过 恢复 命令,从远端存储系统中将数据恢复到任意 Doris 集群。

通过这个功能,可以达到两个目的:

  1. 数据备份:Doris 可以支持将数据定期的进行快照备份
  2. 数据迁移:Doris 可以根据数据备份的快照将数据恢复到新表或不同集群间的表

一、基本原理

备份(Backup)

备份操作是将指定表或分区的数据,直接以 Doris 存储的文件的形式,上传到远端仓库中进行存储。Backup命令为异步操作,提交成功后需要通过 SHOW BACKUP 命令查看进度,仅支持备份 OLAP 类型的表

当用户提交 Backup 请求后,系统内部会做如下操作:

1、快照及快照上传

快照阶段会对指定的表或分区数据文件进行快照,之后,备份都是对快照进行操作。在快照之后,对表进行的更改、导入等操作都不再影响备份的结果。快照只是对当前数据文件产生一个硬链,耗时很少。快照完成后,会开始对这些快照文件进行逐一上传,快照上传由各个 Backend 并发完成。

2、元数据准备及上传

数据文件快照上传完成后,FE 会首先将对应元数据写成本地文件,然后通过 broker 将本地元数据文件上传到远端仓库,完成最终备份作业。

恢复(Restore)

恢复操作需要指定一个远端仓库中已存在的备份,然后将这个备份的内容恢复到本地集群中,RESTORE 命令为异步操作,提交成功后,需通过 SHOW RESTORE 命令查看进度,仅支持恢复 OLAP 类型的表。

当用户提交 Restore 请求后,系统内部会做如下操作:

1、在本地创建对应的元数据

这一步首先会在本地集群中,创建恢复对应的表分区等结构,创建完成后,该表可见,但是不可访问

2、本地snapshot

这一步是将上一步创建的表做一个快照。这其实是一个空快照(因为刚创建的表是没有数据的),其目的主要是在 Backend 上产生对应的快照目录,用于之后接收从远端仓库下载的快照文件。

3、下载快照

远端仓库中的快照文件,会被下载到对应的上一步生成的快照目录中。这一步由各个 Backend 并发完成。

4、生效快照

快照下载完成后,我们要将各个快照映射为当前本地表的元数据。然后重新加载这些快照,使之生效,完成最终的恢复作业。

二、应用实例

1、创建远程仓库

创建一个远端仓库路径,用于备份或恢复,该命令需要借助 Broker 进程访问远端存储,仅 root 或 superuser 用户可以创建仓库,创建过了就不需要再创建。

实例:创建一个名为hdfs_repo的仓库,依赖与hdfs,数据根目录为hdfs://zjyprc-hadoop-5/user/h_miui_ad/ad_bi/doris_data_backup

CREATE REPOSITORY `hdfs_repo`
WITH BROKER `hdfs_broker`
ON LOCATION "hdfs://zjy/user/h_miui_ad/ad_bi/hdfs_broker"
PROPERTIES
(
   "username" = "user",
   "password" = "password"
);

2、备份BACKUP

语法:

BACKUP SNAPSHOT [db_name].{snapshot_name}
TO `repository_name`
ON (
    `table_name` [PARTITION (`p1`, ...)],
     ...
)
PROPERTIES ("key"="value", ...);

说明:

 1). 同一数据库下只能有一个正在执行的 BACKUP 或 RESTORE 任务。
 2). ON 子句中标识需要备份的表和分区,如果不指定分区,则默认备份该表的所有分区。
 3). PROPERTIES 目前支持以下属性:
                "type" = "full":表示这是一次全量更新(默认)。
                "timeout" = "3600":任务超时时间,默认为一天,单位秒。

Examples:

1. 全量备份 example_db 下的表 example_tbl 到仓库 example_repo 中:

BACKUP SNAPSHOT example_db.snapshot_label1
TO example_repo
ON (example_tbl)
PROPERTIES ("type" = "full");

2. 全量备份 example_db 下,表 example_tbl 的 p1, p2 分区,以及表 example_tbl2 到仓库 example_repo 中:

BACKUP SNAPSHOT example_db.snapshot_label2
TO example_repo
ON
(
    example_tbl PARTITION (p1,p2),
    example_tbl2
);

3、SHOW BACKUP

查看最近一次 backup 作业的执行情况(完整信息可以使用Mysql Client 运行 HELP SHOW BACKUP):

  • JobId:本次备份作业的 id。
  • SnapshotName:用户指定的本次备份作业的名称(Label)。
  • DbName:备份作业对应的 Database。
  • State:备份作业当前所在阶段:
    • PENDING:作业初始状态。
    • SNAPSHOTING:正在进行快照操作。
    • UPLOAD_SNAPSHOT:快照结束,准备上传。
    • UPLOADING:正在上传快照。
    • SAVE_META:正在本地生成元数据文件。
    • UPLOAD_INFO:上传元数据文件和本次备份作业的信息。
    • FINISHED:备份完成。
    • CANCELLED:备份失败或被取消。

4、SHOW SNAPSHOT

查看远端仓库中已存在的备份。

如执行 SHOW SNAPSHOT ON `doris_data_bakup_repo` :

Doris数据备份与恢复

5、恢复 RESTORE

语法:

RESTORE SNAPSHOT [db_name].{snapshot_name}
FROM `repository_name`
ON (
     `table_name` [PARTITION (`p1`, ...)] [AS `tbl_alias`],
      ...
   )
PROPERTIES ("key"="value", ...);

说明:
1. 同一数据库下只能有一个正在执行的 BACKUP 或 RESTORE 任务。
2. ON 子句中标识需要恢复的表和分区,如果不指定分区,则默认恢复该表的所有分区。所指定的表和分区必须已存在于仓库备份中。
3. 可以通过 AS 语句将仓库中备份的表名恢复为新的表,但新表名不能已存在于数据库中,分区名称不能修改。
4. 可以将仓库中备份的表恢复替换数据库中已有的同名表,但须保证两张表的表结构完全一致。表结构包括:表名、列、分区、Rollup等等。
5. 可以指定恢复表的部分分区,系统会检查分区 Range 是否能够匹配。
6. PROPERTIES 目前支持以下属性:

  • "backup_timestamp" = "2018-05-04-16-45-08":指定了恢复对应备份的哪个时间版本,必填。该信息可以通过`SHOW SNAPSHOT ON repo;` 语句获得。
  • "replication_num" = "3":指定恢复的表或分区的副本数。默认为3。若恢复已存在的表或分区,则副本数必须和已存在表或分区的副本数相同。同时,必须有足够的 host 容纳多个副本。
  • "timeout" = "3600":任务超时时间,默认为一天,单位秒。
  • "meta_version" = 40:使用指定的 meta_version 来读取之前备份的元数据。注意,该参数作为临时方案,仅用于恢复老版本 Doris 备份的数据。最新版本的备份数据中已经包含 meta version,无需再指定。

Examples:

1. 从 example_repo 中恢复备份 snapshot_1 中的表 backup_tbl 到数据库 example_db1,时间版本为 "2018-05-04-16-45-08"。恢复为 1 个副本:

RESTORE SNAPSHOT example_db1.`snapshot_1`
FROM `example_repo`
ON ( `backup_tbl` )
PROPERTIES
(
    "backup_timestamp"="2018-05-04-16-45-08",
    "replication_num" = "1"
);

2.从 example_repo 中恢复备份 snapshot_2 中的表 backup_tbl 的分区 p1,p2,以及表 backup_tbl2 到数据库 example_db1,并重命名为 new_tbl,时间版本为 "2018-05-04-17-11-01"。默认恢复为 3 个副本:              

RESTORE SNAPSHOT example_db1.`snapshot_2`
FROM `example_repo`
ON
(
    `backup_tbl` PARTITION (`p1`, `p2`),
    `backup_tbl2` AS `new_tbl`
)
PROPERTIES
(
    "backup_timestamp"="2018-05-04-17-11-01"
);

6、SHOW RESTORE

查看最近一次 restore 作业的执行情况。

State:恢复作业当前所在阶段:

  • PENDING:作业初始状态。
  • SNAPSHOTING:正在进行本地新建表的快照操作。
  • DOWNLOAD:正在发送下载快照任务。
  • DOWNLOADING:快照正在下载。
  • COMMIT:准备生效已下载的快照。
  • COMMITTING:正在生效已下载的快照。
  • FINISHED:恢复完成。
  • CANCELLED:恢复失败或被取消。

7、CANCEL BACKUP

取消当前正在执行的备份作业。

8、CANCEL RESTORE

取消当前正在执行的恢复作业。

9、DROP REPOSITORY

删除已创建的远端仓库。删除仓库,仅仅是删除该仓库在 Doris 中的映射,不会删除实际的仓库数据。

三、注意事项

  1. 备份恢复相关的操作目前只允许拥有 ADMIN 权限的用户执行。
  2. 一个 Database 内,只允许有一个正在执行的备份或恢复作业。
  3. 备份和恢复都支持最小分区(Partition)级别的操作,当表的数据量很大时,建议按分区分别执行,以降低失败重试的代价。
  4. 因为备份恢复操作,操作的都是实际的数据文件,所以当一个表的分片过多,或者一个分片有过多的小版本时,可能即使总数据量很小,依然需要备份或恢复很长时间。用户可以通过 SHOW PARTITIONS FROM table_name 和 SHOW TABLET FROM table_name 来查看各个分区的分片数量,以及各个分片的文件版本数量,来预估作业执行时间。文件数量对作业执行的时间影响非常大,所以建议在建表时,合理规划分区分桶,以避免过多的分片。
  5. 当通过 SHOW BACKUP 或者 SHOW RESTORE 命令查看作业状态时,有可能会在 TaskErrMsg 一列中看到错误信息,但只要 State 列不为 CANCELLED,则说明作业依然在继续,这些 Task 有可能会重试成功。当然,有些 Task 错误,也会直接导致作业失败。           

本文地址:https://blog.csdn.net/weixin_43161811/article/details/107385883

相关标签: Doris