バックアップコマンドを使用してセルフマネージド ClickHouse から ClickHouse Cloud に移行する
概要
セルフマネージドな ClickHouse (OSS) から ClickHouse Cloud へデータを移行するには、主に 2 つの方法があります:
- データを直接取得/送信する
remoteSecure()関数を使用する方法 BACKUP/RESTOREコマンドとクラウドオブジェクトストレージを使用する方法
この移行ガイドでは、
BACKUP/RESTOREアプローチに焦点を当て、オープンソース版 ClickHouse のデータベースまたはサービス全体を S3 バケット経由で Cloud に移行する具体的な例を示します。
前提条件
- Docker がインストールされていること
- S3 バケットと IAM ユーザー を用意していること
- 新しい ClickHouse Cloud サービスを作成できること
このガイドの手順を追いやすく再現可能にするため、2 つの分片と 2 つのレプリカを持つ ClickHouse クラスター用の Docker Compose レシピの 1 つを使用します。
このバックアップ方式には ClickHouse クラスターが必要です。これは、テーブルを MergeTree エンジンから ReplicatedMergeTree に変換する必要があるためです。
単一インスタンスで実行している場合は、代わりに「Migrating between self-managed ClickHouse and ClickHouse Cloud using remoteSecure」の手順に従ってください。
OSS の準備
まず、examples リポジトリにある Docker Compose 設定を使って ClickHouse クラスターを起動します。 すでに ClickHouse クラスターが稼働している場合は、ここでのクラスター起動手順は省略して構いません。
- examples リポジトリ をローカル環境にクローンします
- ターミナルで
examples/docker-compose-recipes/recipes/cluster_2S_2Rにcdします - Docker が起動していることを確認したら、ClickHouse クラスターを起動します:
次のように表示されるはずです:
フォルダのルートディレクトリで新しいターミナルウィンドウを開き、そこから次のコマンドを実行してクラスターの最初のノードに接続します。
サンプルデータの作成
ClickHouse Cloud では SharedMergeTree を使用します。
バックアップを復元する際、ClickHouse は ReplicatedMergeTree を使用しているテーブルを自動的に SharedMergeTree テーブルへ変換します。
クラスターを実行している場合、すでにテーブルで ReplciatedMergeTree エンジンを使用している可能性が高いです。
そうでない場合は、バックアップを取得する前に、すべての MergeTree テーブルを ReplicatedMergeTree に変換する必要があります。
MergeTree テーブルを ReplicatedMergeTree に変換する方法を示すために、まずは MergeTree テーブルから始め、その後で ReplicatedMergeTree に変換します。
サンプルテーブルを作成してデータをロードするために、New York taxi data guide の最初の 2 ステップに従います。
便宜上、そのステップを以下に掲載しています。
次のコマンドを実行して、新しいデータベースを作成し、S3 バケットから新しいテーブルにデータを挿入します。
次のコマンドを実行してテーブルを DETACH します。
次にレプリカとしてアタッチします:
最後に、レプリカのメタデータを復元します:
ReplicatedMergeTree に変換されていることを確認してください:
これで、後で S3 バケットからバックアップをリストアできるよう、Cloud サービスのセットアップに進む準備が整いました。
Cloud の準備
データは新しい Cloud サービスにリストアされます。 以下の手順に従って、新しい Cloud サービスを作成します。
Cloud Console を開く
https://console.clickhouse.cloud/ にアクセスします。
新しいサービスを作成する

アクセスロールを作成する
SQL コンソールを開きます。

S3 アクセスを設定する
S3 からバックアップをリストアするには、ClickHouse Cloud と S3 バケット間の安全なアクセスを設定する必要があります。
-
"Accessing S3 data securely" の手順に従い、アクセスロールを作成してロール ARN を取得します。
-
"How to create an S3 bucket and IAM role" で作成した S3 バケットポリシーに、前の手順で取得したロール ARN を追加して更新します。
更新後の S3 バケットのポリシーは次のようになります。
このポリシーには 2 つの ARN が含まれます:
- IAM user (
docs-s3-user):セルフマネージド ClickHouse クラスターが S3 にバックアップできるようにするもの - ClickHouse Cloud role (
ClickHouseAccess-001):Cloud サービスが S3 からリストアできるようにするもの
バックアップの取得(セルフマネージド環境のデプロイメント)
単一のデータベースのバックアップを取得するには、OSS デプロイメントに接続した clickhouse-client から次のコマンドを実行します。
BUCKET_URL、KEY_ID、SECRET_KEY をご自身の AWS の認証情報に置き換えてください。
ガイド "S3 バケットと IAM ロールを作成する方法" では、まだお持ちでない場合にそれらを取得する方法を説明しています。
すべてが正しく設定されていれば、バックアップに割り当てられた一意の ID とバックアップのステータスを含む、以下に示すものと同様のレスポンスが表示されます。
以前は空だった S3 バケットを確認すると、いくつかのフォルダーが表示されていることが確認できます。

完全なマイグレーションを実行している場合は、次のコマンドを実行してサーバー全体をバックアップできます。
上記のコマンドは次の内容をバックアップします:
- すべてのユーザーデータベースとテーブル
- ユーザーアカウントとパスワード
- ロールと権限
- 設定プロファイル
- 行ポリシー
- クォータ
- ユーザー定義関数
別の Cloud Service Provider (CSP) を使用している場合は、TO S3()(AWS および GCP の両方に対応)や TO AzureBlobStorage() 構文を使用できます。
非常に大きなデータベースの場合は、ASYNC を使用してバックアップをバックグラウンドで非同期に実行することを検討してください:
その後、このバックアップ ID を使用してバックアップの進行状況を監視できます。
増分バックアップを作成することも可能です。 バックアップ全般の詳細については、backup and restore ドキュメントを参照してください。
ClickHouse Cloud へのリストア
単一のデータベースをリストアするには、Cloud サービスから次のクエリを実行します。以下の AWS 認証情報を自分のものに置き換え、
ROLE_ARN を "Accessing S3 data securely" で説明した手順の出力として取得した値に設定します。
同様の手順でサービス全体のリストアを実行できます。
ここで Cloud 上で次のクエリを実行すると、Cloud 上にデータベースとテーブルが 正常に復元されていることを確認できます。
