手动恢复Doris数据
Doris支持将当前数据以文件的形式,通过Broker备份到远端存储系统中。再通过恢复命令,从远端存储系统中将数据恢复到任意Doris集群中。可实现将Doris数据定期进行快照备份及数据迁移操作。
- 备份恢复相关的操作目前只允许拥有ADMIN权限的用户执行。
- 一个DataBase内,只允许有一个正在执行的恢复作业。
- Doris数据恢复支持最小分区(Partition)级别的操作,当表的数据量很大时,建议按分区分别执行,以降低失败重试的代价。
- 因为备份恢复操作,操作的都是实际的数据文件。所以当一个表的分片过多,或者一个分片有过多的小版本时,可能即使总数据量很小,依然需要恢复很长时间。
- 当通过SHOW BACKUP或者SHOW RESTORE命令查看作业状态时,有可能会在TaskErrMsg列中看到错误信息,只要State列不为CANCELLED,则说明作业依然在继续。这些Task有可能会重试成功,但有些Task错误,会导致作业失败。
- 如果恢复作业是一次覆盖操作(指定恢复数据到已经存在的表或分区中),那么从恢复作业的COMMIT阶段开始,当前集群上被覆盖的数据有可能不再被还原。如果恢复作业失败或被取消,有可能造成之前的数据损坏且无法访问。这种情况下,只能通过再次执行恢复操作,并等待作业完成。因此,不推荐使用覆盖的方式恢复数据,除非确认当前数据已不再使用。
数据恢复原理介绍
Doris数据恢复操作需指定一个远端仓库中已存在的备份数据,再将备份数据恢复到本地集群中。当提交Restore请求后,系统内部会做如下操作:
前提条件
- 已创建包含Doris服务的集群,集群内各服务运行正常。
- 待连接Doris数据库的节点与MRS集群网络互通。
- 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris章节。
- 创建具有Doris管理权限的用户。
- 集群已启用Kerberos认证(安全模式)
在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。
使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。
- 集群未启用Kerberos认证(普通模式)
使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。
- 集群已启用Kerberos认证(安全模式)
- 已参考手动备份Doris数据完成备份需要恢复的Doris表或分区数据。
恢复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界面连接数据库。
- 从远端已备份数据的仓库中恢复表或分区数据。例如:
- 从example_repo中恢复备份snapshot_label1中的表example_tbl到数据库example_db2,恢复为1个副本:
RESTORE SNAPSHOT example_db2.`snapshot_label1`
FROM `example_repo`
ON ( `example_tbl` )
PROPERTIES
(
"backup_timestamp"="2023-08-16-20-13-55",
"replication_num" = "1"
);
“backup_timestamp”可通过SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label1";命令获取。
- 从example_repo中恢复备份snapshot_label2中的表example_tbl的分区p1和p2,以及恢复表example_tbl2到数据库example_db1,并重命名为new_tbl,默认恢复为3个副本:
RESTORE SNAPSHOT example_db1.`snapshot_label2`
FROM `example_repo`
ON
(
`backup_tbl` PARTITION (`p1`, `p2`),
`backup_tbl2` AS `new_tbl`
)
PROPERTIES
(
"backup_timestamp"="2023-08-16-20-13-55"
);
“backup_timestamp”可通过SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label2";命令获取。
- 从example_repo中恢复备份snapshot_label1中的表example_tbl到数据库example_db2,恢复为1个副本:
- 执行以下命令查看恢复作业的执行情况:
SHOW RESTORE\G;