博客 大数据Doris(五十四):BACKUP数据备份原理和语法

大数据Doris(五十四):BACKUP数据备份原理和语法

   数栈君   发表于 2023-07-06 11:52  467  0

一、基本原理
备份(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` :



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 中的映射,不会删除实际的仓库数据。

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

免责申明:

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群