手动备份Doris数据
Doris支持将当前数据以文件的形式,通过Broker备份到远端存储系统中,可实现将Doris数据定期进行快照备份及数据迁移操作。
- 备份恢复相关的操作目前只允许拥有ADMIN权限的用户执行。
- 一个DataBase内,只允许有一个正在执行的备份作业。
- Doris数据备份支持最小分区(Partition)级别的操作,当表的数据量很大时,建议按分区分别执行,以降低失败重试的代价。
- 因为备份恢复操作,操作的都是实际的数据文件,所以当一个表的分片过多,或者一个分片有过多的小版本时,可能即使总数据量很小,依然需要备份很长时间。
- 当通过SHOW BACKUP或者SHOW RESTORE命令查看作业状态时,有可能会在TaskErrMsg列中看到错误信息,只要State列不为CANCELLED,则说明作业依然在继续。这些Task有可能会重试成功,但有些Task错误,会导致作业失败。
数据备份原理介绍
备份操作是将指定表或分区的数据,直接以Doris存储的文件的形式,上传到远端仓库中进行存储。当用户提交Backup请求后,系统内部会做如下操作:
前提条件
- 已创建包含Doris服务的集群,集群内各服务运行正常。
- 待连接Doris数据库的节点与MRS集群网络互通。
- 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris章节。
- 创建具有Doris管理权限的用户。
- 集群已启用Kerberos认证(安全模式)
在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。
使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。
- 集群未启用Kerberos认证(普通模式)
使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。
- 集群已启用Kerberos认证(安全模式)
备份Doris数据
- 登录安装了MySQL的节点,执行以下命令,连接Doris数据库。
如果集群已启用Kerberos认证(安全模式),需先执行以下命令再连接Doris数据库:
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
- 数据库连接端口为Doris FE的查询连接端口,可以通过登录Manager,单击“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
- Doris FE实例IP地址可通过登录MRS集群的Manager界面,单击“集群 > 服务 > Doris > 实例”,查看任一FE实例的IP地址。
- 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。
- 执行以下命令在HDFS中创建一个远程仓库example_repo:
- 集群已启用Kerberos认证(安全模式)
CREATE REPOSITORY `example_repo`
WITH BROKER `hdfs_broker`
ON LOCATION "hdfs://hadoop-name-node:25000/path/to/repo/"
PROPERTIES
(
"hadoop.security.authentication"="kerberos",
"kerberos_principal"="doris/hadoop.hadoop.com@HADOOP.COM",
"kerberos_keytab"="/opt/huawei/Bigdata/FusionInsight_Doris_8.3.0/install/FusionInsight-Doris-1.2.3/doris-fe/bin/doris.keytab"
);
- 集群未启用Kerberos认证(普通模式)
CREATE REPOSITORY `example_repo`
WITH BROKER `hdfs_broker`
ON LOCATION "hdfs://hadoop-name-node:25000/path/to/repo/"
PROPERTIES
(
"username" = "hdfs",
"password" = ""
);
- 集群已启用Kerberos认证(安全模式)
- 查看已经创建的仓库:
SHOW REPOSITORIES;
- 备份数据到example_repo中,可备份表数据也可以备份分区数据,例如:
- 全量备份example_db中的表example_tbl数据到example_repo中:
BACKUP SNAPSHOT example_db.snapshot_label1
TO example_repo
ON (example_tbl)
PROPERTIES ("type" = "full");
- 全量备份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
);
- 全量备份example_db中的表example_tbl数据到example_repo中:
- 执行以下命令查看backup作业的执行情况:
show BACKUP;
- 在远端仓库中查看备份是否成功。
SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label1";
+-----------------+---------------------+--------+ | Snapshot | Timestamp | Status | +-----------------+---------------------+--------+ | snapshot_label1 | 2022-04-08-15-52-29 | OK | +-----------------+---------------------+--------+ 1 row in set (0.15 sec)