データのバックアップと復元
このトピックでは、StarRocks でデータをバックアップおよび復元する方法、またはデータを新しい StarRocks クラスターに移行する方法について説明します。
StarRocks は、データをスナップショットとしてリモートストレージシステムにバックアップし、任意の StarRocks クラスターにデータを復元することをサポートしています 。
バージョン 3.4.0 以降、StarRocks はより多くのオブジェクトをサポートし、構文をリファクタリングして柔軟性を向上させることで、BACKUP および RESTORE の機能を強化しました。
StarRocks は、次のリモートストレージシステムをサポートしています。
- Apache™ Hadoop® (HDFS) クラスター
- AWS S3
- Google GCS
- MinIO
StarRocks は、次のオブジェクトのバックアップをサポートしています。
- 内部データベース、テーブル(すべてのタイプとパーティショニング戦略)、およびパーティション
- 外部カタログのメタデータ(バージョン 3.4.0 以降でサポート)
- 同期マテリアライズドビューおよび非同期マテリアライズドビュー
- ビュー(バージョン 3.4.0 以降でサポート)
- ユーザー定義関数(バージョン 3.4.0 以降でサポート)
NOTE
共有データ StarRocks クラスターは、データの BACKUP および RESTORE をサポートしていません。
リポジトリの作成
データをバックアップする前に、リモートストレージシステムにデータスナップショットを保存するためのリポジトリを作成する必要があります。StarRocks クラスター内に複数のリポジトリを作成できます。詳細な手順については、CREATE REPOSITORY を参照してください。
- HDFS にリポジトリを作成
次の例では、test_repo という名前のリポジトリを HDFS クラスターに作成します。
CREATE REPOSITORY test_repo
WITH BROKER
ON LOCATION "hdfs://<hdfs_host>:<hdfs_port>/repo_dir/backup"
PROPERTIES(
"username" = "<hdfs_username>",
"password" = "<hdfs_password>"
);
-
AWS S3 にリポジトリを作成
AWS S3 にアクセスするための認証方法として、IAM ユーザーに基づくクレデンシャル(アクセスキーとシークレットキー)、インスタンスプロファイル、またはアサインされたロールを選択できます。
- 次の例では、IAM ユーザーに基づくクレデンシャルを認証方法として使用して、AWS S3 バケット
bucket_s3にtest_repoという名前のリポジトリを作成します。
CREATE REPOSITORY test_repo
WITH BROKER
ON LOCATION "s3a://bucket_s3/backup"
PROPERTIES(
"aws.s3.access_key" = "XXXXXXXXXXXXXXXXX",
"aws.s3.secret_key" = "yyyyyyyyyyyyyyyyyyyyyyyy",
"aws.s3.region" = "us-east-1"
);- 次の例では、インス タンスプロファイルを認証方法として使用して、AWS S3 バケット
bucket_s3にtest_repoという名前のリポジトリを作成します。
CREATE REPOSITORY test_repo
WITH BROKER
ON LOCATION "s3a://bucket_s3/backup"
PROPERTIES(
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-east-1"
);- 次の例では、アサインされたロールを認証方法として使用して、AWS S3 バケット
bucket_s3にtest_repoという名前のリポジトリを作成します。
CREATE REPOSITORY test_repo
WITH BROKER
ON LOCATION "s3a://bucket_s3/backup"
PROPERTIES(
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::xxxxxxxxxx:role/yyyyyyyy",
"aws.s3.region" = "us-east-1"
); - 次の例では、IAM ユーザーに基づくクレデンシャルを認証方法として使用して、AWS S3 バケット
NOTE
StarRocks は、S3A プロトコルに従ってのみ AWS S3 にリポジトリを作成することをサポートしています。したがって、AWS S3 にリポジトリを作成する場合、
ON LOCATIONでリポジトリの場所として渡す S3 URI のs3://をs3a://に置き換える必要があります。
- Google GCS にリポジトリを作成
次の例では、Google GCS バケット bucket_gcs に test_repo という名前のリポジトリを作成します。
CREATE REPOSITORY test_repo
WITH BROKER
ON LOCATION "s3a://bucket_gcs/backup"
PROPERTIES(
"fs.s3a.access.key" = "xxxxxxxxxxxxxxxxxxxx",
"fs.s3a.secret.key" = "yyyyyyyyyyyyyyyyyyyy",
"fs.s3a.endpoint" = "storage.googleapis.com"
);
NOTE
- StarRocks は、S3A プロトコルに従ってのみ Google GCS にリポジトリを作成することをサポートしています。したがって、Google GCS にリポジトリを作成する場合、
ON LOCATIONでリポジトリの場所として渡す GCS URI のプレフィックスをs3a://に置き換える必要があります。- エンドポイントアドレスに
httpsを指定しないでください。
- MinIO にリポジトリを作成
次の例では、MinIO バケット bucket_minio に test_repo という名前のリポジトリを作成します。
CREATE REPOSITORY test_repo
WITH BROKER
ON LOCATION "s3://bucket_minio/backup"
PROPERTIES(
"aws.s3.access_key" = "XXXXXXXXXXXXXXXXX",
"aws.s3.secret_key" = "yyyyyyyyyyyyyyyyy",
"aws.s3.endpoint" = "http://minio:9000"
);
リポジトリが作成された後、SHOW REPOSITORIES を使用してリポジトリを確認できます。データを復元した後、StarRocks で DROP REPOSITORY を使用してリポジトリを削除できます。ただし、リモートストレージシステムにバックアップされたデータスナップショットは、StarRocks を通じて削除することはできません。リモートストレージシステムで手動で削除する必要があります。
データのバックアップ
リポジトリが作成された後、データスナップショットを作成し、リモートリポジトリにバックアップする必要があります。詳細な手順については、BACKUP を参照してください。BACKUP は非同期操作です。SHOW BACKUP を使用して BACKUP ジョブのステータスを確認したり、CANCEL BACKUP を使用して BACKUP ジョブをキャンセルしたりできます。
StarRocks は、データベース、テーブル、またはパーティションの粒度レベルでの完全バックアップをサポートしています。
テーブルに大量のデータを保存している場合は、パーティションごとにデータをバックアップおよび復元することをお勧めします。これにより、ジョブの失敗時の再試行コストを削減できます。定期的に増分データをバックアップする必要がある場合は、テーブルにパーティショニングプランを設定し、新しいパーティションのみを毎回バックアップできます。
データベースのバックアップ
データベースに対して完全な BACKUP を実行すると、データベース内のすべてのテーブル、同期および非同期マテリアライズドビュー、ビュー、および UDF がバックアップされます。
次の例では、スナップショット sr_hub_backup にデータベース sr_hub をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
-- バージョン 3.4.0 以降でサポート。
BACKUP DATABASE sr_hub SNAPSHOT sr_hub_backup
TO test_repo;
-- 以前のバージョンの構文と互換性があります。
BACKUP SNAPSHOT sr_hub.sr_hub_backup
TO test_repo;
テーブルのバックアップ
StarRocks は、すべてのタイプとパーティショニング戦略のテーブルのバックアップと復元をサポートしています。テーブルに対して完全な BACKUP を実行すると、そのテーブルとその上に構築された同期マテリアライズドビューがバックアップされます。
次の例では、スナップショット sr_member_backup にデータベース sr_hub のテーブル sr_member をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
-- バージョン 3.4.0 以降でサポート。
BACKUP DATABASE sr_hub SNAPSHOT sr_member_backup
TO test_repo
ON (TABLE sr_member);
-- 以前のバージョンの構文と互換性があります。
BACKUP SNAPSHOT sr_hub.sr_member_backup
TO test_repo
ON (sr_member);
次の例では、スナップショット sr_core_backup にデータベース sr_hub のテーブル sr_member と sr_pmc をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_core_backup
TO test_repo
ON (TABLE sr_member, TABLE sr_pmc);
次の例では、スナップショット sr_all_backup にデータベース sr_hub のすべてのテーブルをバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_all_backup
TO test_repo
ON (ALL TABLES);
パーティションのバックアップ
次の例では、スナップショット sr_par_backup にデータベース sr_hub のテーブル sr_member のパーティション p1 をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
-- バージョン 3.4.0 以降でサポート。
BACKUP DATABASE sr_hub SNAPSHOT sr_par_backup
TO test_repo
ON (TABLE sr_member PARTITION (p1));
-- 以前のバージョンの構文と互換性があります。
BACKUP SNAPSHOT sr_hub.sr_par_backup
TO test_repo
ON (sr_member PARTITION (p1));
複数のパーティション名をカンマ(,)で区切って指定することで、パーティションを一括でバックアップできます。
マテリアライズドビューのバックアップ
同期マテリアライズドビューは、ベーステーブルの BACKUP 操作と共にバックアップされるため、手動でバックアップする必要はありません。
非同期マテリアライズドビューは、それが属するデータベースの BACKUP 操作と共にバックアップできます。また、手動でバックアップすることもできます。
次の例では、スナップショット sr_mv1_backup にデータベース sr_hub のマテリアライズドビュー sr_mv1 をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_mv1_backup
TO test_repo
ON (MATERIALIZED VIEW sr_mv1);
次の例では、スナップショット sr_mv2_backup にデータベース sr_hub のマテリアライズドビュー sr_mv1 と sr_mv2 をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_mv2_backup
TO test_repo
ON (MATERIALIZED VIEW sr_mv1, MATERIALIZED VIEW sr_mv2);
次の例では、スナップショット sr_mv3_backup にデータベース sr_hub のすべてのマテリアライズドビューをバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_mv3_backup
TO test_repo
ON (ALL MATERIALIZED VIEWS);
ビューのバックアップ
次の例では、スナップショット sr_view1_backup にデータベース sr_hub のビュー sr_view1 をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_view1_backup
TO test_repo
ON (VIEW sr_view1);
次の例では、スナップショット sr_view2_backup にデータベース sr_hub のビュー sr_view1 と sr_view2 をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_view2_backup
TO test_repo
ON (VIEW sr_view1, VIEW sr_view2);
次の例では、スナップショット sr_view3_backup にデータベース sr_hub のすべてのビューをバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_view3_backup
TO test_repo
ON (ALL VIEWS);
UDF のバックアップ
次の例 では、スナップショット sr_udf1_backup にデータベース sr_hub の UDF sr_udf1 をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_udf1_backup
TO test_repo
ON (FUNCTION sr_udf1);
次の例では、スナップショット sr_udf2_backup にデータベース sr_hub の UDF sr_udf1 と sr_udf2 をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_udf2_backup
TO test_repo
ON (FUNCTION sr_udf1, FUNCTION sr_udf2);
次の例では、スナップショット sr_udf3_backup にデータベース sr_hub のすべての UDF をバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP DATABASE sr_hub SNAPSHOT sr_udf3_backup
TO test_repo
ON (ALL FUNCTIONS);
外部カタログのメタデータのバックアップ
次の例では、スナップショット iceberg_backup に外部カタログ iceberg のメタデータをバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP EXTERNAL CATALOG (iceberg) SNAPSHOT iceberg_backup
TO test_repo;
次の例では、スナップショット iceberg_hive_backup に外部カタログ iceberg と hive のメタデータをバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP EXTERNAL CATALOGS (iceberg, hive) SNAPSHOT iceberg_hive_backup
TO test_repo;
次の例では、スナップショット all_catalog_backup にすべての外部カタログのメタデータをバックアップし、リポジトリ test_repo にスナップショットをアップロードします。
BACKUP ALL EXTERNAL CATALOGS SNAPSHOT all_catalog_backup
TO test_repo;
外部カタログの BACKUP 操作をキャンセルするには、次のステートメントを実行します。
CANCEL BACKUP FOR EXTERNAL CATALOG;
データの復元
リモートストレージシステムにバックアップされたデータスナップショットを現在の StarRocks クラスターまたは他の StarRocks クラスターに復元して、データを復元または移行できます。
スナップショットからオブジェクトを復元する際には、スナップショットのタイムスタンプを指定する必要があります。
リモートストレージシステムのデータスナップショットを復元するには、RESTORE ステートメントを使用します。
RESTORE は非同期操作です。SHOW RESTORE を使用して RESTORE ジョブのステータスを確認したり、CANCEL RESTORE を使用して RESTORE ジョブをキャンセルしたりできます。