更新时间:2024-09-18 GMT+08:00

手动恢复Doris数据

Doris支持将当前数据以文件的形式,通过Broker备份到远端存储系统中。再通过恢复命令,从远端存储系统中将数据恢复到任意Doris集群中。可实现将Doris数据定期进行快照备份及数据迁移操作。

  • 备份恢复相关的操作目前只允许拥有ADMIN权限的用户执行。
  • 一个DataBase内,只允许有一个正在执行的恢复作业。
  • Doris数据恢复支持最小分区(Partition)级别的操作,当表的数据量很大时,建议按分区分别执行,以降低失败重试的代价。
  • 因为备份恢复操作,操作的都是实际的数据文件。所以当一个表的分片过多,或者一个分片有过多的小版本时,可能即使总数据量很小,依然需要恢复很长时间。
  • 当通过SHOW BACKUP或者SHOW RESTORE命令查看作业状态时,有可能会在TaskErrMsg列中看到错误信息,只要State列不为CANCELLED,则说明作业依然在继续。这些Task有可能会重试成功,但有些Task错误,会导致作业失败。
  • 如果恢复作业是一次覆盖操作(指定恢复数据到已经存在的表或分区中),那么从恢复作业的COMMIT阶段开始,当前集群上被覆盖的数据有可能不再被还原。如果恢复作业失败或被取消,有可能造成之前的数据损坏且无法访问。这种情况下,只能通过再次执行恢复操作,并等待作业完成。因此,不推荐使用覆盖的方式恢复数据,除非确认当前数据已不再使用。

数据恢复原理介绍

Doris数据恢复操作需指定一个远端仓库中已存在的备份数据,再将备份数据恢复到本地集群中。当提交Restore请求后,系统内部会做如下操作:

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

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

  2. 本地snapshot

    将在本地集群中创建的表做一个快照,是一个空快照(刚创建的表没有数据),用于在Backend上产生对应的快照目录,接收从远端仓库下载的快照文件。

  3. 下载快照

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

  4. 生效快照

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

前提条件

  • 已创建包含Doris服务的集群,集群内各服务运行正常。
  • 待连接Doris数据库的节点与MRS集群网络互通。
  • 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris章节。
  • 创建具有Doris管理权限的用户。
    • 集群已启用Kerberos认证(安全模式)

      在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。

      使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。

    • 集群未启用Kerberos认证(普通模式)

      使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。

恢复Doris数据

  1. 登录安装了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界面连接数据库。

  2. 从远端已备份数据的仓库中恢复表或分区数据。例如:

    • 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的分区p1p2,以及恢复表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";命令获取。

  3. 执行以下命令查看恢复作业的执行情况:

    SHOW RESTORE\G;