メインコンテンツへスキップ

概要

セルフマネージド ClickHouse (OSS) から ClickHouse Cloud にデータを移行するには、主に 2 つの方法があります。
  • remoteSecure() 関数を使用して、データを直接 pull/push する方法
  • クラウドオブジェクトストレージ経由で BACKUP/RESTORE コマンドを使用する方法
この移行ガイドでは、BACKUP/RESTORE アプローチに焦点を当て、 オープンソース版 ClickHouse のデータベース、またはサービス全体を S3 バケット経由で ClickHouse Cloud に移行する実践的な例を紹介します。
前提条件
  • Docker がインストールされていること
  • S3 バケットと IAM ユーザー を用意していること
  • 新しい ClickHouse Cloud サービスを作成できること
このガイドの手順を追いやすくし、再現しやすくするために、 2 つの分片と 2 つのレプリカを持つ ClickHouse クラスター用の docker compose レシピの 1 つを使用します。
クラスターが必要ですこのバックアップ方法では、テーブルを MergeTree エンジンから ReplicatedMergeTree に変換する必要があるため、ClickHouse クラスターが必要です。 単一インスタンスで実行している場合は、代わりに “Migrating between self-managed ClickHouse and ClickHouse Cloud using remoteSecure” の手順に従ってください。

OSS の準備

まず、examples リポジトリの Docker Compose 設定を使って ClickHouse クラスターを起動します。 すでに稼働中の ClickHouse クラスターがある場合は、この手順は省略できます。
  1. examples リポジトリ をローカルマシンにクローンします
  2. ターミナルで examples/docker-compose-recipes/recipes/cluster_2S_2Rcd します
  3. Docker が起動していることを確認してから、ClickHouse クラスターを起動します:
次のように表示されます:
フォルダーのルートディレクトリで新しいターミナルウィンドウを開き、次のコマンドを実行してクラスターの最初のノードに接続します:

MergeTree テーブルから ReplicatedMergeTree テーブルへ

ClickHouse Cloud は SharedMergeTree を使用します。 バックアップの復元時に、ClickHouse は ReplicatedMergeTree を使用するテーブルを自動的に SharedMergeTree テーブルへ変換します。 クラスターで実行している場合、テーブルはすでに ReplicatedMergeTree エンジンを使用している可能性が高いです。 そうでない場合は、バックアップを作成する前に、MergeTree テーブルを ReplicatedMergeTree に変換する必要があります。 MergeTree テーブルを ReplicatedMergeTree に変換する方法を示すため、まず MergeTree テーブルを作成し、その後 ReplicatedMergeTree に変換します。 そのために、New York taxi data guide の最初の 2 つの手順に従って、サンプルテーブルを作成し、データをロードします。 便宜上、これらの手順も以下に記載しています。 新しいデータベースを作成し、S3 バケット から新しいテーブルにデータを挿入するには、次のコマンドを実行します。
次のコマンドを実行し、テーブルをDETACHします。
次に、それをレプリケートテーブルとしてアタッチします:
最後に、レプリカのメタデータを復元します:
ReplicatedMergeTree に変換されていることを確認します:
これで、後で S3 バケットからバックアップを復元できるよう、Cloud サービスの設定に進む準備が整いました。

ReplicatedMergeTree を使った分散テーブル

構成で複数の分片にまたがる分散テーブルを使用している場合は、各ノードにローカルの ReplicatedMergeTree テーブルと、クエリの入口となる Distributed テーブルが必要です。 次のコマンドを実行して、すべてのクラスター ノードにローカルのレプリケートテーブルを作成します:
次に、その上に Distributed テーブルを作成します:
分散テーブル経由でデータを挿入します:

Cloud の準備

データは新しい Cloud サービスに復元します。 以下の手順に従って、新しい Cloud サービスを作成してください。
1

Cloud Console を開く

https://console.clickhouse.cloud/ にアクセスします
2

新しいサービスを作成する

3

サービスを設定して作成する

使用するリージョンと構成を選択し、Create service をクリックします
4

アクセスロールを作成する

SQL Console を開きます

S3 アクセスを設定する

S3 からバックアップを復元するには、ClickHouse Cloud と S3 バケットの間で安全にアクセスできるよう設定する必要があります。
  1. “Accessing S3 data securely” の手順に従ってアクセスロールを作成し、ロール ARN を取得します。
  2. “How to create an S3 bucket and IAM role” で作成した S3 バケットポリシーを更新し、前の手順で取得したロール ARN を追加します。
更新後の S3 バケットポリシーは、次のようになります。
このポリシーには、両方の ARN が含まれています。
  • IAM ユーザー (docs-s3-user): セルフマネージドの ClickHouse クラスターが S3 にバックアップできるようにします
  • ClickHouse Cloud ロール (ClickHouseAccess-001): Cloud サービスが S3 から復元できるようにします

バックアップの作成 (セルフマネージド環境)

各分片は個別にバックアップする必要があります。各分片上のノードに接続し、 分片ごとに一意の宛先パスを指定してバックアップコマンドを実行します。 BUCKET_URLKEY_IDSECRET_KEY は、お使いの AWS 認証情報に置き換えてください。 ガイド「S3 バケットと IAM ロールを作成する方法」 では、まだこれらをお持ちでない場合の取得方法を説明しています。 分片 1:
分片 2:
すべてが正しく設定されていれば、以下のような応答が表示されます。 この応答には、バックアップに割り当てられた一意の ID と、バックアップのステータスが含まれます。
単一ノード構成分散テーブルを使用していない場合は、1つのコマンドでデータベース全体をバックアップできます。
先ほどまで空だった S3 バケットを確認すると、いくつかのフォルダが作成されているのがわかります。 完全な移行を行う場合は、次のコマンドを実行してサーバー全体をバックアップできます。
上記のコマンドでは、次のものがバックアップされます:
  • すべてのユーザーデータベースとテーブル
  • ユーザーアカウントとパスワード
  • ロールと権限
  • 設定プロファイル
  • 行ポリシー
  • クォータ
  • ユーザー定義関数
別のクラウドサービスプロバイダ (CSP) を使用している場合は、TO S3() (AWS と GCP の両方に対応) や TO AzureBlobStorage() の構文を使用できます。 非常に大規模なデータベースの場合は、ASYNC を使用してバックグラウンドでバックアップを実行することも検討してください:
このバックアップIDを使って、バックアップの進行状況を確認できます。
増分バックアップを取得することもできます。 バックアップ全般の詳細については、バックアップと復元のドキュメントを参照してください。

ClickHouse Cloud への復元

各分片のバックアップを 1 つずつ Cloud サービスに復元します。ROLE_ARN“S3 データへ安全にアクセスする” で取得した 値に設定してください。2 回目以降の復元では SETTINGS allow_non_empty_tables=true を使用し、 競合によって失敗する代わりに、分片データがすでに復元済みのテーブルに追記されるようにします。 分片 1:
分片 2:
非分散デプロイメント分散テーブルを使用していない場合は、1つのコマンドでデータベースを復元できます。
同様の手順で、サービス全体を復元することもできます。
復元が完了したら、Cloud でデータが利用可能になっていることを確認できます。
ClickHouse Cloud では内部的に SharedMergeTree を使用しているため、従来の分散テーブルは不要です。削除したうえで、クエリで元のテーブル名をそのまま使えるようにするビューへ置き換えることができます。
分散されていない ReplicatedMergeTree テーブルは SharedMergeTree として復元されます:
最終更新日 2026年6月25日