メインコンテンツまでスキップ

Backup and restore

データのバックアップと復元

このトピックでは、StarRocksでデータをバックアップおよび復元する方法、またはデータを新しいStarRocksクラスタに移行する方法について説明します。

StarRocksでは、データをスナップショットとしてリモートストレージシステムにバックアップし、それを任意のStarRocksクラスタに復元することができます。

StarRocksは以下のリモートストレージシステムをサポートしています。

  • Apache™ Hadoop® (HDFS) クラスタ
  • AWS S3
  • Google GCS

データのバックアップ

StarRocksは、データベース、テーブル、もしくはパーティションの単位での完全なバックアップをサポートしています。

テーブルに大量のデータが格納されている場合、ジョブの失敗時にリトライのコストを削減するため、パーティション単位でデータをバックアップおよび復元することをおすすめします。定期的に増分データをバックアップする必要がある場合は、テーブルに対してダイナミックパーティショニングプラン(例:一定時間間隔ごと)を立てておき、毎回新しいパーティションのみバックアップします。

リポジトリの作成

データをバックアップする前に、リモートストレージシステムにデータスナップショットを格納するためのリポジトリを作成する必要があります。StarRocksクラスタで複数のリポジトリを作成することができます。詳細な手順については、CREATE REPOSITORYを参照してください。

  • HDFSにリポジトリを作成する

次の例は、HDFSクラスタに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>"
);
  • AWS S3にリポジトリを作成するAWS S3へのアクセスのための認証情報として、IAMユーザーベースの資格情報(アクセスキーとシークレットキー)、インスタンスプロファイル、またはアサームドロールのいずれかを選択できます。

    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.endpoint" = "s3.us-east-1.amazonaws.com"
    );
    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"
    );
    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バケットbucket_s3に名前がtest_repoのリポジトリを作成しています。
    • 次の例では、インスタンスプロファイルを使用して、AWS S3バケットbucket_s3に名前がtest_repoのリポジトリを作成しています。
    • 次の例では、アサームドロールを使用して、AWS S3バケットbucket_s3に名前がtest_repoのリポジトリを作成しています。

注記

StarRocksでは、AWS S3でのリポジトリの作成はS3Aプロトコルにのみ対応しています。そのため、AWS S3でリポジトリを作成する場合は、ON LOCATIONでリポジトリの場所として渡すS3 URIのs3://s3a://に置き換える必要があります。

  • Google GCSにリポジトリを作成する

次の例は、Google GCSバケットbucket_gcstest_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"
);

注記

StarRocksでは、Google GCSでのリポジトリの作成はS3Aプロトコルにのみ対応しています。そのため、Google GCSでリポジトリを作成する場合は、ON LOCATIONでリポジトリの場所として渡すGCS URIのプレフィックスをs3a://に置き換える必要があります。

リポジトリが作成されたら、SHOW REPOSITORIESを使用してリポジトリを確認することができます。データの復元が完了した後、StarRocksでDROP REPOSITORYを使用してリポジトリを削除することができます。ただし、リモートストレージシステムにバックアップされたデータスナップショットはStarRocksを介して削除することはできません。リモートストレージシステムで手動で削除する必要があります。

データスナップショットの作成

リポジトリが作成されたら、データスナップショットを作成し、リモートリポジトリにバックアップする必要があります。詳細な手順については、BACKUPを参照してください。

次の例では、データベースsr_hubのテーブルsr_memberに対してデータスナップショットsr_member_backupを作成し、リポジトリtest_repoにバックアップしています。

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

BACKUPは非同期の操作です。SHOW BACKUPを使用して、BACKUPジョブのステータスを確認したり、CANCEL BACKUPを使用してBACKUPジョブをキャンセルしたりすることができます。

データの復元または移行

リモートストレージシステムにバックアップされたデータスナップショットを、現在のStarRocksクラスタまたは他のStarRocksクラスタに復元または移行することで、データを復元することができます。

(オプション) 新しいクラスタにリポジトリを作成する

データを別の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クラスタまたは他のStarRocksクラスタに復元することができます。

次の例では、test_repoのデータスナップショットsr_member_backupをテーブルsr_memberに復元しています。データレプリカは1つだけ復元されます。

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"
);

RESTOREは非同期の操作です。SHOW RESTOREを使用して、RESTOREジョブのステータスを確認したり、CANCEL RESTOREを使用してRESTOREジョブをキャンセルしたりすることができます。

BACKUPまたはRESTOREジョブの設定

BACKUPまたはRESTOREジョブのパフォーマンスを最適化するために、BE設定ファイルのbe.confで以下の設定項目を変更することができます。

設定項目

説明

upload_worker_count

BEノードのBACKUPジョブのアップロードタスクのスレッドの最大数。デフォルト:1。この設定項目の値を増やすと、アップロードタスクの並行処理性能が向上します。

download_worker_count

BEノードのRESTOREジョブのダウンロードタスクのスレッドの最大数。デフォルト:1。この設定項目の値を増やすと、ダウンロードタスクの並行処理性能が向上します。

max_download_speed_kbps

BEノードのダウンロード速度の上限。デフォルト:50000。単位:KB/s。通常、RESTOREジョブのダウンロードタスクの速度はこのデフォルト値を超えません。もしRESTOREジョブのパフォーマンスがこの設定によって制限されている場合は、バンド幅に応じて値を増やすことができます。

使用上の注意

  • ADMIN権限を持つユーザーのみがデータをバックアップまたは復元できます。
  • 各データベースでは、実行中のBACKUPまたはRESTOREジョブは1つだけ許可されます。それ以外の場合、StarRocksはエラーを返します。
  • BACKUPおよびRESTOREジョブは、StarRocksクラスタの多くのリソースを占有するため、StarRocksクラスタが重い負荷をかけているときにデータをバックアップまたは復元できるようにしておくことをおすすめします。
  • StarRocksは、データバックアップのためのデータ圧縮アルゴリズムの指定をサポートしていません。
  • スナップショット生成時にロードされたデータはスナップショットに含まれません。そのため、スナップショット生成後であり、RESTOREジョブが完了する前の古いクラスタにデータをロードした場合、データが復元されたクラスタにもデータをロードする必要があります。データ移行が完了した後、一定期間両方のクラスタにデータを並行してロードし、データとサービスの正確性を確認した後でアプリケーションを新しいクラスタに移行することをおすすめします。
  • RESTOREジョブが完了する前に、復元するテーブルを操作することはできません。
  • プライマリキーテーブルは、StarRocksのバージョン2.5より前のクラスタには復元できません。
  • 復元するテーブルの名前と重複する既存のテーブルが存在する場合、StarRocksはまず既存のテーブルのスキーマと復元するテーブルのスキーマが一致するかどうかをチェックします。スキーマが一致する場合、StarRocksはスナップショットのデータで既存のテーブルを上書きします。スキーマが一致しない場合、RESTOREジョブは失敗します。復元するテーブルの名前にキーワードASを使用してテーブルの名前を変更するか、データを復元する前に既存のテーブルを削除することができます。
  • RESTOREジョブが既存のデータベース、テーブル、またはパーティションを上書きすると、ジョブがCOMMITフェーズに入った後は上書きされたデータを復元することはできません。RESTOREジョブがこの時点で失敗したりキャンセルされたりすると、データが破損してアクセスできない状態になる場合があります。この場合、RESTORE操作を再実行し、ジョブの完了を待つしかありません。そのため、データがもはや使用されていないことが確実である場合を除き、上書きによるデータの復元は行わないことをおすすめします。上書き操作は、スナップショットと既存のデータベース、テーブル、またはパーティションのメタデータの整合性を最初にチェックします。一貫性のない箇所が検出されると、RESTORE操作は実行できません。
  • BACKUPまたはRESTOREジョブ中に、StarRocksは同期マテリアライズドビューを自動的にバックアップまたは復元します。マテリアライズドビューはデータの復元後もクエリの高速化や書き換えを行うことができます。現在は、ビューと非同期マテリアライズドビューのバックアップはサポートしていません。物理テーブルのみをバックアップすることができますが、これはクエリの高速化や書き換えには使用できません。
  • 現在、StarRocksはユーザーアカウント、権限、リソースグループに関連する設定データのバックアップをサポートしていません。
  • 現在、StarRocksはテーブル間のColocate Joinの関係のバックアップおよび復元をサポートしていません。