Créer un snapshot
La sauvegarde par snapshot utilise la commande standardBACKUP avec experimental_lightweight_snapshot = true. Le paramètre id est obligatoire — il donne un nom au snapshot et sert à y faire référence dans les commandes déverrouillage et observability :
id et status, et id peut servir à suivre l’opération dans system.backups.
Sauvegardez une seule table vers S3 :
Restaurer sur le même service
Comme un snapshot stocke des références vers des fichiers de stockage objet plutôt que des copies des données, une restauration vers un nouveau service ClickHouse ou vers un autre service ClickHouse nécessite un accès au stockage objet d’origine. C’est pourquoi la restauration entre services n’est pas prise en charge via SQL : elle est uniquement disponible dans l’UI. En SQL, vous pouvez restaurer un snapshot sur le même service à partir d’un bucket de sauvegarde externe à l’aide desnapshot_from_current_service = 1. Cela lit directement les objets via le disk de destination, au lieu de passer par un lecteur de snapshot distant :
AS restaure la table sous un nouveau nom, en laissant la table d’origine intacte. Pour remplacer la table d’origine, supprimez-la d’abord :
Déverrouiller un snapshot
Chaque snapshot conserve des verrous dans ClickHouse Keeper qui empêchent les fichiers de stockage objet référencés d’être supprimés par le ramasse-miettes. Une fois la restauration terminée — ou lorsqu’un snapshot n’est plus nécessaire — déverrouillez-le pour libérer ces verrous. Il existe deux formes : un déverrouillage au niveau système, qui supprime tous les verrous du snapshot d’un seul coup, et un déverrouillage par table, qui supprime le verrou d’une seule table tout en laissant le reste du snapshot intact. Déverrouillage au niveau système — supprime tous les verrous du snapshot :FROM est facultative lorsque la destination du snapshot a été enregistrée dans Keeper lors de sa création (visible dans la colonne info de system.snapshot_locks) :
system.snapshot_locks, et les parts qui ne sont plus référencées par d’autres snapshots ne figurent plus dans system.snapshot_parts.
Observability
system.backups
Toutes les opérations de snapshot apparaissent danssystem.backups, aux côtés des opérations habituelles de sauvegarde et de restauration. Interrogez cette table à l’aide de l’id que vous avez défini (ou de l’UUID renvoyé par la commande) :
system.snapshot_locks
system.snapshot_locks affiche les snapshots validés actuellement enregistrés dans Keeper. Lorsqu’un snapshot est validé, un nœud Keeper est créé à l’emplacement /clickhouse/snapshot/committed/{snapshot_id}. Avant de supprimer une partie de données, le server vérifie si un snapshot validé verrouille cette part. Si c’est le cas, la suppression n’a pas lieu. Le verrou reste en place jusqu’à ce que vous déverrouilliez explicitement le snapshot.
Chaque ligne représente un snapshot validé. Si vous voyez des verrous pour des snapshots qui n’ont plus de destination de sauvegarde valide, exécutez
SYSTEM UNLOCK SNAPSHOT pour les supprimer.
Pour vérifier si un verrou de snapshot spécifique est présent :
system.snapshot_parts
system.snapshot_parts affiche les parties de données actuellement retenues par au moins un verrou de snapshot. Pour chaque partie verrouillée, un nœud Keeper existe à l’emplacement /clickhouse/snapshot/{table_uuid}/{part_name} et contient la taille compressée et non compressée de la partie. Cette table lit ces nœuds pour indiquer quelles parties sont actuellement protégées contre la suppression.
Les parts avec
snapshots_size > 1 sont référencées par plusieurs snapshots et ne seront pas supprimées du stockage objet tant que tous les snapshots qui les verrouillent n’auront pas été déverrouillés.
Pour vérifier le stockage total retenu :