メインコンテンツへスキップ
スナップショットバックアップは、クラウドネイティブなテーブルエンジン向けの軽量バックアップモードです。データをコピーする代わりに、ClickHouse Keeper に各パーツのロックノードを書き込みます。これらのロックにより、スナップショットが保持されている間、server は参照先のオブジェクトストレージ上のパーツを削除できません。バックアップではその後、データを物理的にコピーする代わりにオブジェクトストレージへの参照を記録するため、テーブルサイズに関係なくスナップショットを高速に作成できます。 この軽量方式は、SharedMergeTree、SharedSet、SharedJoin テーブルに適用されます。Log や Memory など、それ以外のすべてのエンジンタイプでは、自動的に標準のコピー方式バックアップにフォールバックします。

スナップショットを作成する

スナップショットバックアップでは、標準の BACKUP コマンドに experimental_lightweight_snapshot = true を指定して使用します。id 設定は必須で、スナップショットに名前を付けるために使われ、ロック解除コマンドやオブザーバビリティコマンドから参照する際にも使用されます。
このコマンドは idstatus を返します。idsystem.backups で操作の進行状況を追跡するために使用できます。 単一のテーブルを S3 にバックアップします。
データベース全体をバックアップする:
1つを除くすべてのテーブルをバックアップします:
同じコマンドは Azure Blob Storage でも使用できます。

同じサービスに復元する

スナップショットはデータのコピーではなく、オブジェクトストレージ内のファイルへの参照を保存するため、新しい、または別の ClickHouse サービスに復元するには、元のオブジェクトストレージへのアクセスが必要です。そのため、サービス間の復元は SQL ではサポートされておらず、UI からのみ実行できます。SQL では、snapshot_from_current_service = 1 を使用することで、外部バックアップバケットから同じサービスにスナップショットを復元できます。これにより、リモートのスナップショットリーダーを経由せず、宛先ディスク経由でオブジェクトを直接読み取ります:
AS 句を使うと、新しいテーブル名で復元され、元のテーブルはそのまま残ります。元のテーブルを上書きするには、まずそのテーブルを削除してください:

スナップショットのロック解除

各スナップショットは ClickHouse Keeper にロックを保持し、参照先のオブジェクトストレージ内のファイルがガベージコレクションされるのを防ぎます。復元が完了したら、またはスナップショットが不要になったら、それらのロックを解放するためにロック解除を行います。 ロック解除には 2 つの形式があります。1 つはスナップショットに対するすべてのロックを一度に削除するシステムレベルのロック解除、もう 1 つはスナップショットの残りをそのまま維持したまま、単一のテーブルに対するロックだけを削除するテーブル単位のロック解除です。 システムレベルのロック解除 — スナップショットに対するすべてのロックを削除します:
テーブルごとのロック解除 — 1つのテーブルのロックだけを解除します:
スナップショットの宛先が作成時に Keeper に保存されている場合 (system.snapshot_locksinfo カラムで確認可能) 、FROM 句は省略できます。
ロック解除後、対応する行はsystem.snapshot_locksから消え、他のスナップショットから参照されていないパーツはsystem.snapshot_partsからも消えます。

オブザーバビリティ

system.backups

すべてのスナップショット操作は、通常のバックアップおよびリストア操作とともに system.backups に表示されます。設定した id (またはコマンドが返した UUID) を指定してクエリします。

system.snapshot_locks

system.snapshot_locks には、現在 Keeper に登録されているコミット済みスナップショットが表示されます。スナップショットがコミットされると、/clickhouse/snapshot/committed/{snapshot_id} に Keeper ノードが作成されます。data パーツ を削除する前に、server はコミット済みスナップショットがその パーツ に対するロックを保持しているかどうかを確認します。保持している場合、その削除はスキップされます。このロックは、スナップショットを明示的にロック解除するまで保持されます。
各行は、コミット済みのスナップショットを 1 つ表します。すでに有効な保存先が存在しないスナップショットのロックが見つかった場合は、SYSTEM UNLOCK SNAPSHOT を実行してクリーンアップしてください。 特定のスナップショットロックが存在するかどうかを確認するには:

system.snapshot_parts

system.snapshot_parts は、少なくとも 1 つのスナップショットロックによって現在固定されている data パーツ を表示します。ロックされている各 data パーツ については、/clickhouse/snapshot/{table_uuid}/{part_name} に Keeper ノードが存在し、その data パーツ の圧縮サイズと非圧縮サイズが格納されます。このテーブルはそれらのノードを読み取り、現在削除から保護されているパーツを表示します。
snapshots_size > 1 のパーツは複数のスナップショットから参照されており、ロックを保持しているすべてのスナップショットがロック解除されるまで、オブジェクトストレージから削除されません。 ピン留めされているストレージの合計を確認するには:
スナップショットによってロックされているものの、すでに削除されているか、サーバー上でアクティブでなくなっているパーツ、つまりスナップショットロックのためだけにオブジェクトストレージに保持されているデータを見つけるには:
これは、元のデータが変更または削除された後もスナップショットを保持することで発生するストレージのオーバーヘッドを把握するのに役立ちます。

サーバー設定

以下のサーバー設定パラメータは、スナップショットの動作を制御します。これらはSQLではなく、サーバー設定ファイルで設定します。
最終更新日 2026年6月29日