BACKUP
StarRocks 支持备份和恢复以下对象
- 内部数据库、表(所有类型和分区策略)和分区
- 外部 Catalog 的元数据(从 v3.4.0 版本开始支持)
- 同步物化视图和异步物化视图
- 逻辑视图(从 v3.4.0 版本开始支持)
- 用户定义的函数(从 v3.4.0 版本开始支持)
提示
有关备份和恢复的概述,请参阅备份和恢复指南。
BACKUP 是一个异步操作。您可以使用 SHOW BACKUP 查看 BACKUP 作业的状态,或者使用 CANCEL BACKUP 取消 BACKUP 作业。 您可以使用 SHOW SNAPSHOT 查看快照信息。
注意
- 共享数据 StarRocks 集群不支持数据 BACKUP 和 RESTORE。
- 在每个数据库中,每次只允许运行一个 BACKUP 或 RESTORE 作业。否则,StarRocks 将返回错误。
- StarRocks 不支持为数据备份指定数据压缩算法。
权限要求
在 v3.0 之前的版本中,具有 admin_priv
权限的用户可以执行此操作。 在 v3.0 及更高版本中,要备份特定对象,用户必须具有 System 级别的 REPOSITORY 权限以及相应表或相应数据库下所有表的 EXPORT 权限。 例如
-
授予角色从指定表导出数据的权限。
GRANT REPOSITORY ON SYSTEM TO ROLE backup_tbl;
GRANT EXPORT ON TABLE <table_name> TO ROLE backup_tbl; -
授予角色从指定数据下的所有表导出数据的权限。
GRANT REPOSITORY ON SYSTEM TO ROLE backup_db;
GRANT EXPORT ON ALL TABLES IN DATABASE <database_name> TO ROLE backup_db; -
授予角色从所有数据库中的所有表导出数据的权限。
GRANT REPOSITORY ON SYSTEM TO ROLE backup;
GRANT EXPORT ON ALL TABLES IN ALL DATABASES TO ROLE backup;
兼容早期版本的语法
BACKUP SNAPSHOT <db_name>.<snapshot_name>
TO <repository_name>
[ ON ( <table_name> [ PARTITION ( <partition_name> [, ...] ) ]
[, ...] ) ]
[ PROPERTIES ("key"="value" [, ...] ) ]
参数
参数 | 描述 |
---|---|
db_name | 存储要备份的数据的数据库的名称。 |
snapshot_name | 指定数据快照的名称。 全局唯一。 |
repository_name | 仓库名称。 您可以使用 CREATE REPOSITORY 创建仓库。 |
ON | 要备份的表的名称。 如果未指定此参数,则备份整个数据库。 |
PARTITION | 要备份的分区的名称。 如果未指定此参数,则备份整个表。 |
PROPERTIES | 数据快照的属性。 有效键
|
v3.4.0 及更高版本支持的语法
-- Back up external catalog metadata.
BACKUP { ALL EXTERNAL CATALOGS | EXTERNAL CATALOG[S] (<catalog_name> [, ...]) }
[ DATABASE <db_name> ] SNAPSHOT [<db_name>.]<snapshot_name>
TO <repository_name>
[ PROPERTIES ("key"="value" [, ...] ) ]
-- Back up databases, tables, partitions, materialized views, logical views, or UDFs.
BACKUP [ DATABASE <db_name> ] SNAPSHOT [<db_name>.]<snapshot_name>
TO <repository_name>
[ ON ( backup_object [, ...] )]
[ PROPERTIES ("key"="value" [, ...] ) ]
backup_object ::= [
{ ALL TABLE[S] | TABLE[S] <table_name>[, TABLE[S] <table_name> ...] } |
{ ALL MATERIALIZED VIEW[S] | MATERIALIZED VIEW[S] <mv_name>[, MATERIALIZED VIEW[S] <mv_name> ...] } |
{ ALL VIEW[S] | VIEW[S] <view_name>[, VIEW[S] <view_name> ...] } |
{ ALL FUNCTION[S] | FUNCTION[S] <udf_name>[, FUNCTION[S] <udf_name> ...] } |
<table_name> PARTITION (<partition_name>[, ...]) ]
参数
参数 | 描述 |
---|---|
ALL EXTERNAL CATALOGS | 备份所有外部 Catalog 的元数据。 |
catalog_name | 需要备份的外部 Catalog 的名称。 |
DATABASE db_name | 对象或快照所属的数据库的名称。 您只能指定 DATABASE <db_name> 或 <db_name>. 。 |
db_name. | 对象或快照所属的数据库的名称。 您只能指定 DATABASE <db_name> 或 <db_name>. 。 |
snapshot_name | 数据快照的名称。 全局唯一。 |
repository_name | 仓库名称。 您可以使用 CREATE REPOSITORY 创建仓库。 |
ON | 要备份的对象。 如果未指定此参数,则备份整个数据库。 |
table_name | 要备份的表的名称。 |
mv_name | 要备份的物化视图的名称。 |
view_name | 要备份的逻辑视图的名称。 |
udf_name | 要备份的 UDF 的名称。 |
PARTITION | 要备份的分区的名称。 如果未指定此参数,则备份整个表。 |
PROPERTIES | 数据快照的属性。 有效键
|
示例
兼容早期版本的语法示例
示例 1:将数据库 example_db
备份到仓库 example_repo
。
BACKUP SNAPSHOT example_db.snapshot_label1
TO example_repo
PROPERTIES ("type" = "full");
示例 2:将 example_db
中的表 example_tbl
备份到 example_repo
。
BACKUP SNAPSHOT example_db.snapshot_label2
TO example_repo
ON (example_tbl);
示例 2:将 example_db
中 example_tbl
的分区 p1
和 p2
以及表 example_tbl2
备份到 example_repo
。
BACKUP SNAPSHOT example_db.snapshot_label3
TO example_repo
ON(
example_tbl PARTITION (p1, p2),
example_tbl2
);
v3.4.0 及更高版本支持的语法示例
示例 1:备份数据库。
BACKUP DATABASE sr_hub SNAPSHOT sr_hub_backup TO test_repo;
示例 2:备份数据库中的表。
-- Backs up one table.
BACKUP DATABASE sr_hub SNAPSHOT sr_member_backup
TO test_repo
ON (TABLE sr_member);
-- Backs up multiple tables.
BACKUP DATABASE sr_hub SNAPSHOT sr_core_backup
TO test_repo
ON (TABLE sr_member, TABLE sr_pmc);
-- Backs up all tables.
BACKUP DATABASE sr_hub SNAPSHOT sr_all_backup
TO test_repo
ON (ALL TABLES);
示例 3:备份表中的分区。
-- Backs up one partition.
BACKUP DATABASE sr_hub SNAPSHOT sr_par_backup
TO test_repo
ON (TABLE sr_member PARTITION (p1));
-- Backs up multiple partitions.
BACKUP DATABASE sr_hub SNAPSHOT sr_par_backup
TO test_repo
ON (TABLE sr_member PARTITION (p1,p2,p3));
示例 4:备份数据库中的物化视图。
-- Backs up one materialized view.
BACKUP DATABASE sr_hub SNAPSHOT sr_mv1_backup
TO test_repo
ON (MATERIALIZED VIEW sr_mv1);
-- Backs up multiple materialized views.
BACKUP DATABASE sr_hub SNAPSHOT sr_mv2_backup
TO test_repo
ON (MATERIALIZED VIEW sr_mv1, MATERIALIZED VIEW sr_mv2);
-- Backs up all materialized views.
BACKUP DATABASE sr_hub SNAPSHOT sr_mv3_backup
TO test_repo
ON (ALL MATERIALIZED VIEWS);
示例 5:备份数据库中的逻辑视图。
-- Backs up one logical view.
BACKUP DATABASE sr_hub SNAPSHOT sr_view1_backup
TO test_repo
ON (VIEW sr_view1);
-- Backs up multiple logical views.
BACKUP DATABASE sr_hub SNAPSHOT sr_view2_backup
TO test_repo
ON (VIEW sr_view1, VIEW sr_view2);
-- Backs up all logical views.
BACKUP DATABASE sr_hub SNAPSHOT sr_view3_backup
TO test_repo
ON (ALL VIEWS);
示例 6:备份数据库中的 UDF。
-- Backs up one UDF.
BACKUP DATABASE sr_hub SNAPSHOT sr_udf1_backup
TO test_repo
ON (FUNCTION sr_udf1);
-- Backs up multiple UDFs.
BACKUP DATABASE sr_hub SNAPSHOT sr_udf2_backup
TO test_repo
ON (FUNCTION sr_udf1, FUNCTION sr_udf2);
-- Backs up all UDFs.
BACKUP DATABASE sr_hub SNAPSHOT sr_udf3_backup
TO test_repo
ON (ALL FUNCTIONS);
使用说明
- 对全局、数据库、表和分区级别执行备份和恢复操作需要不同的权限。
- 在每个数据库中,每次只允许运行一个 BACKUP 或 RESTORE 作业。否则,StarRocks 将返回错误。
- 由于 BACKUP 和 RESTORE 作业占用 StarRocks 集群的许多资源,您可以在 StarRocks 集群负载不高时备份和恢复数据。
- StarRocks 不支持为数据备份指定数据压缩算法。
- 由于数据是作为快照备份的,因此在快照生成时加载的数据不包含在快照中。 因此,如果在生成快照后和 RESTORE 作业完成之前将数据加载到旧集群中,还需要将数据加载到数据恢复到的集群中。 建议在数据迁移完成后的一段时间内将数据并行加载到两个集群中,然后在验证数据和服务正确性后将应用程序迁移到新集群。
- 在 RESTORE 作业完成之前,您无法操作要恢复的表。
- 主键表无法恢复到 v2.5 之前的 StarRocks 集群。
- 您无需在恢复之前在新集群中创建要恢复的表。RESTORE 作业会自动创建它。
- 如果存在与要恢复的表重名的表,StarRocks 首先检查现有表的 Schema 是否与要恢复的表匹配。 如果 Schema 匹配,StarRocks 会使用快照中的数据覆盖现有表。 如果 Schema 不匹配,则 RESTORE 作业将失败。 您可以使用关键字
AS
重命名要恢复的表,或者在恢复数据之前删除现有表。 - 如果 RESTORE 作业覆盖了现有的数据库、表或分区,则在作业进入 COMMIT 阶段后,无法恢复覆盖的数据。 如果 RESTORE 作业在此点失败或被取消,则数据可能会损坏且无法访问。 在这种情况下,您只能再次执行 RESTORE 操作并等待作业完成。 因此,我们建议您不要通过覆盖来恢复数据,除非您确定当前数据不再使用。 覆盖操作首先检查快照与现有数据库、表或分区之间的元数据一致性。 如果检测到不一致,则无法执行 RESTORE 操作。
- 目前,StarRocks 不支持备份和恢复与用户帐户、权限和资源组相关的配置数据。
- 目前,StarRocks 不支持备份和恢复表之间的 Colocate Join 关系。