Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

SAUVEGARDE / RESTAURATION vers ou depuis un point de terminaison S3

Cet article traite de la sauvegarde vers un bucket S3 ou de la restauration depuis celui-ci via un point de terminaison S3.

Syntaxe

-- core commands
BACKUP | RESTORE 
--- what to backup/restore (or exclude)
TABLE [db.]table_name           [AS [db.]table_name_in_backup] |
DICTIONARY [db.]dictionary_name [AS [db.]name_in_backup] |
DATABASE database_name          [AS database_name_in_backup] |
TEMPORARY TABLE table_name      [AS table_name_in_backup] |
VIEW view_name                  [AS view_name_in_backup] |
[EXCEPT TABLES ...] |
ALL [EXCEPT {TABLES|DATABASES}...] } [,...]
--- 
[ON CLUSTER 'cluster_name']
--- where to backup or restore to or from
TO|FROM 
File('<path>/<filename>') | 
Disk('<disk_name>', '<path>/') | 
S3('<S3 endpoint>/<path>', '<Access key ID>', '<Secret access key>', '<extra_credentials>') |
AzureBlobStorage('<connection string>/<url>', '<container>', '<path>', '<account name>', '<account key>')
--- additional settings
[SETTINGS ...]
[ASYNC]

Consultez "résumé des commandes" pour obtenir plus de détails sur chaque commande.

Exemple d’utilisation

Sauvegarde incrémentielle vers un point de terminaison S3

Dans cet exemple, nous allons créer une sauvegarde vers un point de terminaison S3, puis effectuer une restauration à partir de celle-ci.

Vous aurez besoin des informations suivantes pour utiliser cette méthode :

Paramètre Exemple
Un point de terminaison S3 https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/
ID de la clé d’accès BKIOZLE2VYN3VXXTP9RC
Clé d’accès secrète 40bwYnbqN7xU8bVePaUCh3+YEyGXu8UOMV9ANpwL

La destination d’une sauvegarde est spécifiée comme suit :

S3('<s3 endpoint>/<directory>', '<access key id>', '<secret access key>', '<extra_credentials>')

Préparation

Créez la base de données et la table suivantes, puis insérez-y des données aléatoires :

CREATE DATABASE IF NOT EXISTS test_db;
CREATE TABLE test_db.test_table
(
    `key` Int,
    `value` String,
    `array` Array(String)
)
ENGINE = MergeTree
ORDER BY tuple()
INSERT INTO test_db.test_table SELECT *
FROM generateRandom('key Int, value String, array Array(String)')
LIMIT 1000

Créer une sauvegarde de base

Les sauvegardes incrémentielles nécessitent une sauvegarde de base comme point de départ. Le premier paramètre de la destination S3 est l’endpoint S3, suivi du répertoire dans le bucket à utiliser pour cette sauvegarde. Dans cet exemple, le répertoire s’appelle my_backup.

Exécutez la commande suivante pour créer la sauvegarde de base :

BACKUP TABLE test_db.test_table TO S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/base_backup',
'<access key id>',
'<secret access key>'
)
┌─id───────────────────────────────────┬─status─────────┐
│ de442b75-a66c-4a3c-a193-f76f278c70f3 │ BACKUP_CREATED │
└──────────────────────────────────────┴────────────────┘

Ajoutez plus de données

Les sauvegardes incrémentielles ne contiennent que les différences entre la sauvegarde de base et le contenu actuel de la table sauvegardée. Ajoutez plus de données avant d'effectuer la sauvegarde incrémentielle :

INSERT INTO test_db.test_table SELECT *
FROM generateRandom('key Int, value String, array Array(String)')
LIMIT 100

Effectuer une sauvegarde incrémentielle

Cette commande de sauvegarde est similaire à celle de la sauvegarde de base, mais elle ajoute SETTINGS base_backup ainsi que l’emplacement de la sauvegarde de base. Notez que la destination de la sauvegarde incrémentielle n'est pas le même répertoire que celui de la sauvegarde de base : c'est le même endpoint, mais avec un répertoire cible différent dans le bucket. La sauvegarde de base se trouve dans my_backup et la sauvegarde incrémentielle sera écrite dans my_incremental :

BACKUP TABLE test_db.test_table TO S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/incremental_backup',
'<access key id>',
'<secret access key>'
)
SETTINGS base_backup = S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/base_backup',
'<access key id>',
'<secret access key>'
)
┌─id───────────────────────────────────┬─status─────────┐
│ f6cd3900-850f-41c9-94f1-0c4df33ea528 │ BACKUP_CREATED │
└──────────────────────────────────────┴────────────────┘

Restaurer depuis la sauvegarde incrémentielle

Cette commande restaure la sauvegarde incrémentielle dans une nouvelle table, test_table_restored. Notez que lors de la restauration d'une sauvegarde incrémentielle, la sauvegarde de base est également incluse. Indiquez uniquement la sauvegarde incrémentielle lors de la restauration :

RESTORE TABLE data AS test_db.test_table_restored FROM S3(
'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/incremental_backup',
'<access key id>',
'<secret access key>'
)
┌─id───────────────────────────────────┬─status───┐
│ ff0c8c39-7dff-4324-a241-000796de11ca │ RESTORED │
└──────────────────────────────────────┴──────────┘

Vérifiez le nombre de lignes

La table d’origine data a fait l’objet de deux insertions : l’une de 1 000 lignes et l’autre de 100 lignes, soit un total de 1 100. Vérifiez que la table restaurée contient bien 1 100 lignes :

SELECT count()
FROM test_db.test_table_restored
┌─count()─┐
│    1100 │
└─────────┘

Vérifiez le contenu

Cette commande compare le contenu de la table d’origine, test_table, avec celui de la table restaurée test_table_restored :

SELECT throwIf((
   SELECT groupArray(tuple(*))
   FROM test_db.test_table
   ) != (
   SELECT groupArray(tuple(*))
   FROM test_db.test_table_restored
), 'Data does not match after BACKUP/RESTORE')
Navigation