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

手动备份Doris数据

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

  • 备份恢复相关的操作目前只允许拥有ADMIN权限的用户执行。
  • 一个DataBase内,只允许有一个正在执行的备份作业。
  • Doris数据备份支持最小分区(Partition)级别的操作,当表的数据量很大时,建议按分区分别执行,以降低失败重试的代价。
  • 因为备份恢复操作,操作的都是实际的数据文件,所以当一个表的分片过多,或者一个分片有过多的小版本时,可能即使总数据量很小,依然需要备份很长时间。
  • 当通过SHOW BACKUP或者SHOW RESTORE命令查看作业状态时,有可能会在TaskErrMsg列中看到错误信息,只要State列不为CANCELLED,则说明作业依然在继续。这些Task有可能会重试成功,但有些Task错误,会导致作业失败。

数据备份原理介绍

备份操作是将指定表或分区的数据,直接以Doris存储的文件的形式,上传到远端仓库中进行存储。当用户提交Backup请求后,系统内部会做如下操作:

  1. 快照及快照上传

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

  2. 元数据准备及上传

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

  • 如果备份的表是动态分区表,备份之后会自动禁用动态分区属性,在执行数据恢复操作前需手动将该表的动态分区属性启用,命令为:

    ALTER TABLE tbl1 SET ("dynamic_partition.enable"="true")

  • 数据备份操作不会保留表的colocate_with属性。

前提条件

  • 已创建包含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界面连接数据库。

  1. 执行以下命令在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" = ""

      );

  2. 查看已经创建的仓库:

    SHOW REPOSITORIES;

  1. 备份数据到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_tblp1p2分区,以及表example_tbl2example_repo中:

      BACKUP SNAPSHOT example_db.snapshot_label2

      TO example_repo

      ON

      (

      example_tbl PARTITION (p1,p2),

      example_tbl2

      );

  2. 执行以下命令查看backup作业的执行情况:

    show BACKUP;

  3. 在远端仓库中查看备份是否成功。

    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)