Utilisez les commandes BACKUP et RESTORE pour sauvegarder les données ClickHouse vers Object Storage Service (OSS) en vue d'un archivage à long terme, ou pour migrer un cluster ClickHouse autogéré vers ApsaraDB for ClickHouse. Il s'agit de commandes SQL intégrées à ClickHouse qui agissent sur les bases de données, les tables et d'autres objets.
Limitations
Il est impossible de sauvegarder ou de restaurer des données entre l'édition compatible avec la communauté et l'édition Enterprise. Leurs moteurs de base de données et de tables sont incompatibles.
L'utilisation du processeur augmente lors des opérations de sauvegarde et de restauration. Ajustez les paramètres
backup_threadsetrestore_threadspour limiter l'utilisation des ressources. L'utilisation de la mémoire n'est pas significativement affectée.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
L'accès au bucket OSS accordé à ClickHouse — consultez Exemples courants de politiques de bucket
L'endpoint correspondant à votre région
Syntaxe
-- Commands
BACKUP | RESTORE [ASYNC]
-- What to back up or restore
TABLE [db.]table_name [AS [db.]table_name_in_backup]
[PARTITION[S] partition_expr [,...]] |
DICTIONARY [db.]dictionary_name [AS [db.]name_in_backup] |
DATABASE database_name [AS database_name_in_backup]
[EXCEPT TABLES ...] |
TEMPORARY TABLE table_name [AS table_name_in_backup] |
VIEW view_name [AS view_name_in_backup] |
ALL [EXCEPT {TABLES|DATABASES}...] [,...]
-- Cluster scope (optional)
[ON CLUSTER 'cluster_name']
-- Destination (BACKUP) or source (RESTORE)
TO|FROM
File('<path>/<filename>') |
Disk('<disk_name>', '<path>/') |
S3('<S3 endpoint>/<path>', '<Access Key ID>', '<Access Key Secret>')
-- Incremental backup base (optional)
[SETTINGS base_backup =
File('<path>/<filename>') |
Disk(...) |
S3('<S3 endpoint>/<path>', '<Access Key ID>', '<Access Key Secret>')]
Paramètres
| Paramètre | Description | |
|---|---|---|
ASYNC |
Exécute l'opération de manière asynchrone. La commande retourne immédiatement et l'opération se poursuit en arrière-plan. | |
TABLE [db.]table_name [AS ...] |
Sauvegarde ou restaure une table spécifique. Utilisez AS pour la renommer dans la sauvegarde. |
|
PARTITION[S] partition_expr |
Limite la sauvegarde ou la restauration à des partitions spécifiques d'une table. | |
DICTIONARY [db.]dictionary_name [AS ...] |
Sauvegarde ou restaure un objet dictionnaire. | |
DATABASE database_name [AS ...] |
Sauvegarde ou restaure une base de données entière. Utilisez EXCEPT TABLES pour exclure des tables spécifiques. |
|
ALL |
Sauvegarde ou restaure tous les objets. Utilisez EXCEPT pour exclure des tables ou des bases de données spécifiques. |
|
ON CLUSTER 'cluster_name' |
Exécute l'opération sur tous les nœuds du cluster. | |
`TO \ |
FROM` |
Spécifie la direction : |
File(...) |
Sauvegarde vers ou restaure depuis un fichier local. | |
Disk(...) |
Sauvegarde vers ou restaure depuis un disque nommé configuré dans ClickHouse. | |
S3(...) |
Sauvegarde vers ou restaure depuis un endpoint compatible S3 (tel qu'OSS). Utilisez un chemin de dossier pour les sauvegardes de cluster ; les fichiers ZIP ne sont pas pris en charge pour les déploiements multi-nœuds. | |
SETTINGS base_backup |
Spécifie la sauvegarde de base pour une sauvegarde incrémentielle. Seules les données modifiées depuis la sauvegarde de base sont incluses. |
Sauvegarder des données
Édition compatible avec la communauté
Télécharger directement vers OSS
BACKUP TABLE default.data ON CLUSTER default
TO S3('https://<yourBucketName>.<yourEndpoint>/data/', '<yourAccessKeyID>', '<yourAccessKeySecret>')
Sauvegarder sur un disque local, puis télécharger vers OSS
ApsaraDB for ClickHouse ne prend pas en charge la sauvegarde des données sur un disque local. N'utilisez cette approche que pour les clusters ClickHouse autogérés.
-
Créez le fichier
/etc/clickhouse-server/config.d/backup_disk.xmlpour définir un disque de sauvegarde. Le bloc<storage_configuration>définit un disque nommébackupssitué dans le chemin/backups/. Le bloc<backups>restreint les sauvegardes à ce disque et à ce chemin.<clickhouse> <storage_configuration> <disks> <backups> <type>local</type> <path>/backups/</path> </backups> </disks> </storage_configuration> <backups> <allowed_disk>backups</allowed_disk> <allowed_path>/backups/</allowed_path> </backups> </clickhouse> -
Sauvegardez la table sur le disque local.
BACKUP TABLE test.table TO Disk('backups', 'data_1.zip') -
Téléchargez le fichier de sauvegarde vers OSS à l'aide de ossutil.
ossutil cp data_1.zip oss://<yourBucketName>/data/data_1.zip \ -i <yourAccessKeyID> \ -k <yourAccessKeySecret> \ -e <yourEndpoint>
Édition Enterprise
BACKUP TABLE default.data
TO S3('https://<yourBucketName>.<yourEndpoint>/data/data_1.zip', '<yourAccessKeyID>', '<yourAccessKeySecret>')
Restaurer des données
Édition compatible avec la communauté
-- Restore to a single node from a ZIP file
RESTORE TABLE default.data
FROM S3('https://<yourBucketName>.<yourEndpoint>/data/data_1.zip', '<yourAccessKeyID>', '<yourAccessKeySecret>')
-- Restore to all nodes from a directory
RESTORE TABLE default.data ON CLUSTER default
FROM S3('https://<yourBucketName>.<yourEndpoint>/data/', '<yourAccessKeyID>', '<yourAccessKeySecret>')
Édition Enterprise
RESTORE TABLE default.data
FROM S3('https://<yourBucketName>.<yourEndpoint>/data/data_1.zip', '<yourAccessKeyID>', '<yourAccessKeySecret>')
Sauvegardes incrémentielles
Utilisez SETTINGS base_backup pour ne sauvegarder que les données modifiées depuis une sauvegarde précédente. Les sauvegardes incrémentielles sont utiles pour les grandes bases de données ou les plannings de sauvegarde fréquents, où une sauvegarde complète à chaque fois serait trop coûteuse.
-- Step 1: Create a base (full) backup
BACKUP TABLE default.data ON CLUSTER default
TO S3('https://<yourBucketName>.<yourEndpoint>/base_backup/', '<yourAccessKeyID>', '<yourAccessKeySecret>')
-- Step 2: Create an incremental backup against the base
BACKUP TABLE default.data ON CLUSTER default
TO S3('https://<yourBucketName>.<yourEndpoint>/incremental_backup/', '<yourAccessKeyID>', '<yourAccessKeySecret>')
SETTINGS base_backup = S3('https://<yourBucketName>.<yourEndpoint>/base_backup/', '<yourAccessKeyID>', '<yourAccessKeySecret>')
-- Step 3: Restore from the incremental backup
RESTORE TABLE default.data ON CLUSTER default
FROM S3('https://<yourBucketName>.<yourEndpoint>/incremental_backup/', '<yourAccessKeyID>', '<yourAccessKeySecret>')
Quand utiliser des sauvegardes complètes plutôt que des sauvegardes incrémentielles :
| Stratégie | Cas d'utilisation |
|---|---|
| Sauvegarde complète | Bases de données plus petites ou données critiques où la simplicité de la restauration est primordiale |
| Sauvegarde incrémentielle | Bases de données plus volumineuses ou plannings de sauvegarde fréquents où le coût est un facteur déterminant |
| Combinaison des deux | Par exemple, des sauvegardes complètes hebdomadaires et des sauvegardes incrémentielles quotidiennes |
Surveiller la progression des sauvegardes et des restaurations
Exécuter les opérations de manière asynchrone
Ajoutez ASYNC pour éviter de maintenir une connexion ouverte pendant les opérations de longue durée. La commande retourne immédiatement et l'opération se poursuit en arrière-plan.
BACKUP TABLE default.data ON CLUSTER default
TO S3('https://<yourBucketName>.<yourEndpoint>/data/', '<yourAccessKeyID>', '<yourAccessKeySecret>')
ASYNC;
Vérifier la progression
Interrogez system.backups pour vérifier l'état :
SELECT * FROM system.backups;
Optimisation des performances
Afficher les paramètres de performance
-- User-level parameters
SELECT * FROM system.settings WHERE name LIKE '%backup%' OR name LIKE '%restore%';
-- Server-level parameters
SELECT * FROM system.server_settings WHERE name LIKE '%backup%' OR name LIKE '%restore%';
Paramètres de sauvegarde
| Portée | Paramètre | Description |
|---|---|---|
| Serveur | backup_threads |
Nombre maximal de threads pour une sauvegarde. Valeur par défaut : 16. Nécessite un redémarrage. |
| Serveur | max_backup_bandwidth_for_server |
Plafond de bande passante total pour toutes les sauvegardes simultanées sur un seul serveur. Nécessite un redémarrage. |
| Serveur | max_backups_io_thread_pool_size |
Nombre maximal de threads pour les opérations d'E/S de sauvegarde. Nécessite un redémarrage. |
| Serveur | max_backups_io_thread_pool_free_size |
Nombre maximal de threads inactifs dans le pool de threads d'E/S de sauvegarde. Nécessite un redémarrage. |
| Utilisateur | max_backup_bandwidth |
Plafond de bande passante pour une seule tâche de sauvegarde. |
Paramètres de restauration
| Portée | Paramètre | Description |
|---|---|---|
| Serveur | restore_threads |
Nombre maximal de threads pour une restauration. Valeur par défaut : 16. Nécessite un redémarrage. |
FAQ
J'obtiens l'erreur « Not found backup engine S3 » — que faire ?
L'instance exécute une version qui ne prend pas en charge les sauvegardes S3. Effectuez une mise à niveau vers la version 23.8 ou ultérieure. Si vous utilisez un cluster autogéré, sauvegardez d'abord sur un disque local, puis téléchargez vers OSS.
J'obtiens l'erreur « Using archives with backups on clusters is disabled » — que faire ?
Les sauvegardes de clusters multi-nœuds ne prennent pas en charge les archives ZIP. Utilisez plutôt un chemin de dossier :
BACKUP TABLE default.data ON CLUSTER default
TO S3('https://<yourBucketName>.<yourEndpoint>/data/', '<yourAccessKeyID>', '<yourAccessKeySecret>')
La connexion a été interrompue après l'exécution de BACKUP — ma sauvegarde a-t-elle échoué ?
Non. La sauvegarde s'exécute en arrière-plan, indépendamment de l'état de la connexion. Vérifiez la progression avec :
SELECT * FROM system.backups;
Pour éviter complètement ce problème, ajoutez ASYNC à la commande :
BACKUP TABLE default.data ON CLUSTER default
TO S3('https://<yourBucketName>.<yourEndpoint>/data/', '<yourAccessKeyID>', '<yourAccessKeySecret>')
ASYNC;
Quelle est la vitesse des commandes BACKUP et RESTORE ?
La vitesse dépend de la ressource qui constitue le goulot d'étranglement : le processeur, le débit du disque, le débit du réseau ou la bande passante OSS.
Pour ApsaraDB for ClickHouse, augmentez les spécifications du cluster afin d'améliorer le processeur, le débit du disque et le débit du réseau.
Pour connaître les limites de bande passante OSS, consultez Limites et métriques de performance.
Comment sauvegarder ou restaurer les nœuds un par un ?
-
Interrogez les adresses IP des nœuds.
SELECT * FROM system.clusters; -
Connectez-vous directement au nœud cible à l'aide de clickhouse-client et désactivez le paramètre DDL de cluster obligatoire.
RemarqueCe paramètre s'applique uniquement à ApsaraDB for ClickHouse. Ne l'utilisez pas sur des clusters ClickHouse autogérés.
SET enforce_on_cluster_default_for_ddl = 0; -
Exécutez la commande
BACKUP.BACKUP TABLE default.data TO S3('https://<yourBucketName>.<yourEndpoint>/data/data_1.zip', '<yourAccessKeyID>', '<yourAccessKeySecret>') -
Exécutez la commande
RESTORE.RESTORE TABLE default.data FROM S3('https://<yourBucketName>.<yourEndpoint>/data/data_1.zip', '<yourAccessKeyID>', '<yourAccessKeySecret>')