You need to enable JavaScript to run this app.
导航
StarRocks实例备份与恢复最佳实践
最近更新时间:2024.11.06 10:51:35首次发布时间:2024.11.06 10:51:35

备份数据

StarRocks 支持以数据库、表、或分区为粒度全量备份数据。
当表的数据量很大时,建议您按分区分别执行,以降低失败的概率。如果您需要对数据进行定期备份,建议您在建表时制定动态分区策略,从而可以在后期运维过程中,仅定期备份新增分区中的数据。

说明

存算分离的 Starrocks 暂不可用备份与恢复功能。

创建仓库

仓库用于在远端存储系统中存储备份文件。备份数据前,您需要基于远端存储系统路径在 StarRocks 中创建仓库。您可以在同一集群中创建多个仓库。详细使用方法参阅 CREATE REPOSITORY

  • 在 HDFS 集群中创建仓库。

    说明

    以下示例为在 Apache™ Hadoop® 集群中创建仓库 test_repo

    CREATE REPOSITORY test_repo
    WITH BROKER
    ON LOCATION "hdfs://<hdfs_host>:<hdfs_port>/repo_dir/backup"
    PROPERTIES(
        "username" = "<hdfs_username>",
        "password" = "<hdfs_password>"
    );
    
  • 在 TOS 中创建仓库。

    说明

    您可以使用 IAM 用户凭证(Access Key 和 Secret Key) 作为访问 TOS 的安全凭证。

    示例
    以 IAM 用户凭证作为安全凭证在 bucket_tos TOS 存储桶中创建仓库 test_repo

    CREATE REPOSITORY test_repo
    WITH BROKER
    ON LOCATION ""s3a://bucket_tos/backu"
    PROPERTIES(
        "aws.s3.region"="cn-beijing",
        "aws.s3.endpoint" = "tos-cn-beijing.ivolces.com",
        "aws.s3.access_key" = "XXXXXXXXXXXXXXXXX",
        "aws.s3.secret_key" = "yyyyyyyyyyyyyyyyyyyyyyyy"
        
    );
    

    说明

    火山引擎 TOS 支持的地域(Region)和访问域名(S3 Endpoint)请参考地域和访问域名

仓库创建完成后,您可以通过 SHOW REPOSITORIES 查看已创建的仓库。完成数据备份恢复后,您可以通过 DROP REPOSITORY 语句删除 StarRocks 中的仓库。但目前无法通过 StarRocks 直接删除备份在远端存储系统中的快照数据,您需要手动删除备份在远端存储系统的快照路径。

备份数据快照

创建数据仓库后,您可以通过 BACKUP 命令创建数据快照并将其备份至远端仓库。
示例
在数据库 sr_hub 中为表 sr_member 创建数据快照 sr_member_backup 并备份至仓库 test_repo 中。

BACKUP SNAPSHOT sr_hub.sr_member_backup
TO test_repo
ON (sr_member);

说明

StarRocks 支持以下粒度的备份还原操作:

  • 分区级:你需要按照以下格式在 ON 子句中指定分区名 ON (<table_name> PARTITION (<partition_name>, ...))
  • 表级:你需要在 ON 子句中指定表名 ON (<table_name>)
  • 数据库级:您无需指定 ON 子句。此举将备份或还原整个数据库。

数据备份为异步操作。您可以通过 SHOW BACKUP 语句查看备份作业状态,或通过 CANCEL BACKUP 语句取消备份作业。

恢复或迁移数据

您可以将备份至远端仓库的数据快照恢复到当前或其他 StarRocks 集群,完成数据恢复或迁移。

查看数据库快照

开始恢复或迁移前,您可以通过 SHOW SNAPSHOT 查看特定仓库对应的数据快照信息。
示例
查看仓库 test_repo 中的数据快照信息。

mysql> SHOW SNAPSHOT ON test_repo;
+------------------+-------------------------+--------+
| Snapshot         | Timestamp               | Status |
+------------------+-------------------------+--------+
| sr_member_backup | 2023-02-07-14-45-53-143 | OK     |
+------------------+-------------------------+--------+
1 row in set (1.16 sec)

恢复数据快照

通过 RESTORE 语句将远端仓库中的数据快照恢复至当前或其他 StarRocks 集群以恢复或迁移数据。
示例
将仓库 test_repo 中的数据快照 sr_member_backup恢复为表 sr_member,仅恢复一个数据副本。

RESTORE SNAPSHOT sr_hub.sr_member_backup
FROM test_repo
ON (sr_member)
PROPERTIES (
    "backup_timestamp"="2023-02-07-14-45-53-143",
    "replication_num" = "1"
);

说明

StarRocks 支持以下粒度的备份还原操作:

  • 分区级:你需要按照以下格式在 ON 子句中指定分区名 ON (<table_name> PARTITION (<partition_name>, ...))
  • 表级:你需要在 ON 子句中指定表名 ON (<table_name>)
  • 数据库级:您无需指定 ON 子句。此举将备份或还原整个数据库。

数据恢复为异步操作。您可以通过 SHOW RESTORE 语句查看恢复作业状态,或通过 CANCEL RESTORE 语句取消恢复作业。

配置相关参数

您可以通过修改以下配置项加速备份或还原作业。

配置项

说明

make_snapshot_worker_count

BE 节点快照任务的最大线程数,用于备份作业。默认值:5。增加此配置项的值可以增加快照任务并行度。

release_snapshot_worker_count

BE 节点释放快照任务的最大线程数,用于备份作业异常清理。默认值:5。增加此配置项的值可以增加释放快照任务并行度。

upload_worker_count

BE 节点上传任务的最大线程数,用于备份作业。默认值:0。0 表示设置线程数为 BE 所在机器的 CPU 核数。增加此配置项的值可以增加上传任务并行度。

download_worker_count

BE 节点下载任务的最大线程数,用于恢复作业。默认值:10。当生效值为0时,表示设置线程数为 BE 所在机器的 CPU 核数。增加此配置项的值可以增加下载任务并行度。

说明

如您实际配置参数与上述表格描述有差异,请通过 提工单 的方式,联系火山引擎技术支持人员。

物化视图备份恢复

在备份或还原表(Table)数据期间,StarRocks 会自动备份或还原其中的 同步物化视图
从StarRocks 3.2.3 版本开始,在进行数据库的备份和还原操作时,可以同时对数据库中的异步物化视图进行备份和还原。
在备份和还原数据库期间,StarRocks 执行以下操作。

  • BACKUP
  1. 遍历数据库以收集所有表和异步物化视图的信息。
  2. 调整备份还原队列中表的顺序,确保物化视图的基表位于物化视图之前:
    • 如果基表存在于当前数据库中,StarRocks 将表添加到队列中。
    • 如果基表不存在于当前数据库中,StarRocks 打印警告日志并继续执行备份操作而不阻塞该过程。
  3. 按照队列的顺序执行备份任务。
  • RESTORE
  1. 按照备份还原队列的顺序还原表和物化视图。
  2. 重新构建物化视图与其基表之间的依赖关系,并重新提交刷新任务调度。

说明

在对物化视图进行备份和还原操作的过程中,不管出现任何错误情况,都不会使备份和还原过程停止或中断。您可以通过 SHOW BACKUP 语句查看备份作业状态,通过 SHOW RESTORE 语句查看恢复作业状态。

操作完成后,您可以使用SHOW MATERIALIZED VIEWS 检查物化视图的状态。

  • 如果物化视图处于 Active 状态,则可以直接使用。
  • 如果物化视图处于 Inactive 状态,可能是因为其基表尚未还原。在还原所有基表后,您可以使用ALTER MATERIALIZED VIEW 重新激活物化视图。

注意事项

  • 执行全局、数据库级、表级以及分区级备份恢复需要不同权限。详细内容请参考 基于使用场景创建自定义角色
  • 单一数据库内,同一时间只能执行一个备份作业或者一个恢复作业。否则StarRocks 会返回错误提示。
  • 因为备份与恢复操作会占用一定系统资源,建议您在集群业务低峰期进行该操作。
  • 目前 StarRocks 不支持在备份数据时使用压缩算法。
  • 因为数据备份是通过快照的形式完成的,所以在当前数据快照生成之后导入的数据不会被备份。因此,在快照生成至恢复(迁移)作业完成这段期间导入的数据,需要重新导入至集群。建议您在迁移完成后,对新旧两个集群并行导入一段时间,完成数据和业务正确性校验后,再将业务迁移到新的集群。
  • 在恢复作业完成前,被恢复表无法被操作。
  • Primary Key 表无法被恢复至 v2.5 之前版本的 StarRocks 集群中。
  • 您无需在恢复作业前在新集群中创建需要被恢复表。恢复作业将自动创建该表。
  • 如果被恢复表与已有表重名,StarRocks 会首先识别已有表的 Schema。如果 Schema 相同,StarRocks 会覆盖写入已有表。如果 Schema 不同,恢复作业失败。您可以通过 AS 关键字重新命名被恢复表,或者删除已有表后重新发起恢复作业。
  • 如果恢复作业是一次覆盖操作(指定恢复数据到已经存在的表或分区中),那么从恢复作业的 COMMIT 阶段开始,当前集群上被覆盖的数据有可能不能再被还原。此时如果恢复作业失败或被取消,有可能造成之前的数据损坏且无法访问。这种情况下,只能通过再次执行恢复操作,并等待作业完成。因此,我们建议您,如无必要,不要使用覆盖的方式恢复数据,除非确认当前数据已不再使用。覆盖操作会检查快照和已存在的表或分区的元数据是否相同,包括 Schema 和 Rollup 等信息,如果不同则无法执行恢复操作。
  • 目前 StarRocks 暂不支持备份恢复逻辑视图。
  • 目前 StarRocks 暂不支持备份恢复用户、权限以及资源组配置相关数据。
  • StarRocks 不支持备份恢复表之间的 Colocate Join 关系。