Pular para o conteúdo principal
Esta seção apresenta uma visão geral de backups e restaurações no ClickHouse. Para uma descrição mais detalhada de cada método de backup, consulte as páginas dos métodos específicos na barra lateral.

Introdução

Embora a replicação ofereça proteção contra falhas de hardware, ela não protege contra erros humanos: exclusão acidental de dados, exclusão da tabela errada ou de uma tabela no cluster errado, e bugs de software que resultam em processamento incorreto de dados ou corrupção de dados. Em muitos casos, erros como esses afetam todas as réplicas. O ClickHouse tem salvaguardas integradas para evitar alguns tipos de erro; por exemplo, por padrão você não pode simplesmente excluir tabelas com um motor da família MergeTree contendo mais de 50 Gb de dados. No entanto, essas salvaguardas não cobrem todos os casos possíveis, e problemas ainda podem ocorrer. Para mitigar com eficácia possíveis erros humanos, você deve preparar cuidadosamente uma estratégia de backup e restauração dos seus dados com antecedência. Cada empresa tem recursos disponíveis e requisitos de negócio diferentes, portanto não há uma solução universal de backups e restaurações do ClickHouse que sirva para todas as situações. O que funciona para um gigabyte de dados provavelmente não funcionará para dezenas de petabytes de dados. Há várias abordagens possíveis, cada uma com seus próprios prós e contras, que são apresentadas nesta seção da documentação. É uma boa ideia usar várias abordagens em vez de apenas uma, para compensar suas diferentes limitações.
Lembre-se de que, se você fez backup de algo e nunca tentou restaurá-lo, há grandes chances de que a restauração não funcione corretamente quando você realmente precisar dela (ou, pelo menos, leve mais tempo do que a empresa pode tolerar). Portanto, qualquer que seja a abordagem de backup escolhida, certifique-se de automatizar também o processo de restauração e pratique-o regularmente em um cluster ClickHouse de contingência.
As páginas a seguir detalham os vários métodos de backup e restauração disponíveis no ClickHouse:
PáginaDescrição
Backup/restore using local disk or S3 diskDetalha o backup/restauração para ou a partir de um disco local ou disco S3
Backup/restore using S3 endpointDetalha o backup/restauração para ou a partir de um endpoint S3
Backup/restore using AzureBlobStorageDetalha o backup/restauração para ou a partir do Azure Blob Storage
Alternative methodsDiscute métodos alternativos de backup
Snapshot backupSnapshots leves para tabelas SharedMergeTree usando armazenamento de objetos em nuvem
Os backups podem:

Tipos de backup

Os backups podem ser completos ou incrementais. Os backups completos são uma cópia completa dos dados, enquanto os backups incrementais contêm apenas as alterações nos dados desde o último backup completo. Os backups completos têm a vantagem de serem um método de recuperação simples, independente (de outros backups) e confiável. No entanto, podem levar muito tempo para serem concluídos e podem consumir muito espaço. Os backups incrementais, por outro lado, são mais eficientes tanto em termos de tempo quanto de espaço, mas a restauração dos dados exige que todos os backups estejam disponíveis. Dependendo das suas necessidades, você pode optar por usar:
  • Backups completos para bancos de dados menores ou dados críticos.
  • Backups incrementais para bancos de dados maiores ou quando os backups precisam ser feitos com frequência e com bom custo-benefício.
  • Ambos, por exemplo, backups completos semanais e backups incrementais diários.

Backups síncronos vs. assíncronos

Os comandos BACKUP e RESTORE também podem ser marcados como ASYNC. Nesse caso, o comando de backup retorna imediatamente, e o processo de backup é executado em segundo plano. Se os comandos não forem marcados como ASYNC, o processo de backup será síncrono, e o comando ficará bloqueado até que o backup seja concluído.

Backups concorrentes vs. não concorrentes

Por padrão, o ClickHouse permite backups e restaurações concorrentes. Isso significa que você pode iniciar várias operações de backup ou restauração simultaneamente. No entanto, há configurações no nível do servidor que permitem desativar esse comportamento. Se você definir essas configurações como false, apenas uma operação de backup ou restauração poderá ser executada em um cluster por vez. Isso pode ajudar a evitar contenção de recursos ou possíveis conflitos entre operações. Para desativar backups/restaurações concorrentes, você pode usar estas configurações, respectivamente:
<clickhouse>
    <backups>
        <allow_concurrent_backups>false</allow_concurrent_backups>
        <allow_concurrent_restores>false</allow_concurrent_restores>
    </backups>
</clickhouse>
O valor padrão de ambos é true, então, por padrão, backups/restaurações concorrentes são permitidos. Quando essas configurações são false em um cluster, apenas um único backup/restauração pode ser executado no cluster por vez.

Backups compactados vs. não compactados

Os backups do ClickHouse suportam compactação por meio das configurações compression_method e compression_level. Ao criar um backup, você pode especificar:
BACKUP TABLE test.table
  TO Disk('backups', 'filename.zip')
  SETTINGS compression_method='lzma', compression_level=3

Usando coleções nomeadas

Coleções nomeadas permitem armazenar pares chave-valor (como credenciais do S3, endpoints e configurações) que podem ser reutilizados em operações de backup e restauração. Elas ajudam a:
  • Ocultar credenciais de usuários sem acesso de Admin
  • Simplificar comandos armazenando configurações complexas de forma centralizada
  • Manter a consistência entre as operações
  • Evitar a exposição de credenciais nos logs de consultas
Consulte “coleções nomeadas” para mais detalhes.

Backup de tabelas de sistema, de log ou de gerenciamento de acesso

As tabelas de sistema também podem ser incluídas nos seus fluxos de trabalho de backup e restauração, mas isso depende do seu caso de uso específico. Tabelas de sistema que armazenam dados históricos, como aquelas com o sufixo _log (por exemplo, query_log, part_log), podem ser submetidas a backup e restauração como qualquer outra tabela. Se o seu caso de uso depender da análise de dados históricos — por exemplo, usar query_log para acompanhar o desempenho de consultas ou depurar problemas —, é recomendável incluir essas tabelas na sua estratégia de backup. No entanto, se os dados históricos dessas tabelas não forem necessários, elas podem ser excluídas para economizar espaço de armazenamento de backup. Tabelas de sistema relacionadas ao gerenciamento de acesso, como usuários, roles, row_policies, settings_profiles e quotas, recebem tratamento especial durante as operações de backup e restauração. Quando essas tabelas são incluídas em um backup, seu conteúdo é exportado para um arquivo especial accessXX.txt, que contém as instruções SQL equivalentes para criar e configurar as entidades de acesso. Durante a restauração, o processo interpreta esses arquivos e reaplica os comandos SQL para recriar os usuários, roles e outras configurações. Esse recurso garante que a configuração de controle de acesso de um cluster ClickHouse possa ser submetida a backup e restauração como parte da configuração geral do cluster. Essa funcionalidade só funciona para configurações gerenciadas por meio de comandos SQL (chamadas de “Controle de acesso e gerenciamento de contas orientados por SQL”). As configurações de acesso definidas em arquivos de configuração do servidor ClickHouse (por exemplo, users.xml) não são incluídas em backups e não podem ser restauradas por esse método.

Sintaxe geral

-- comandos principais
BACKUP | RESTORE 
--- o que incluir no backup/restaurar (ou excluir)
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']
--- destino ou origem do backup ou restauração
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>')
--- configurações adicionais
[SETTINGS ...]
[ASYNC]
Consulte “resumo dos comandos” para obter mais detalhes sobre cada comando.

Resumo dos comandos

Cada um dos comandos acima é detalhado a seguir:
ComandoDescrição
BACKUPCria um backup dos objetos especificados
RESTORERestaura objetos de um backup
TABLE [db.]table_name [AS [db.]table_name_in_backup]Faz backup/restauração de uma tabela específica (pode ser renomeada)
[PARTITION[S] partition_expr [,...]]Faz backup/restauração apenas de partições específicas da tabela
DICTIONARY [db.]dictionary_name [AS [db.]name_in_backup]Faz backup/restauração de um objeto de Dicionário
DATABASE database_name [AS database_name_in_backup]Faz backup/restauração de um banco de dados inteiro (pode ser renomeado)
TEMPORARY TABLE table_name [AS table_name_in_backup]Faz backup/restauração de uma tabela temporária (pode ser renomeada)
VIEW view_name [AS view_name_in_backup]Faz backup/restauração de uma view (pode ser renomeada)
[EXCEPT TABLES ...]Exclui tabelas específicas ao fazer backup de um banco de dados
ALLFaz backup/restauração de tudo (todos os bancos de dados, tabelas etc.). Antes da versão 23.4 do ClickHouse, ALL se aplicava apenas ao comando RESTORE.
[EXCEPT {TABLES|DATABASES}...]Exclui tabelas ou bancos de dados específicos ao usar ALL
[ON CLUSTER 'cluster_name']Executa o backup/restauração em todo o cluster do ClickHouse
TO|FROMDireção: TO para o destino do backup, FROM para a origem da restauração
File('<path>/<filename>')Armazena no/restaura do sistema de arquivos local
Disk('<disk_name>', '<path>/')Armazena em/restaura de um disco configurado
S3('<S3 endpoint>/<path>', '<Access key ID>', '<Secret access key>')Armazena no/restaura do Amazon S3 ou de armazenamento compatível com S3
[SETTINGS ...]Veja abaixo a lista completa de configurações
[ASYNC]Faz com que a operação seja executada de forma assíncrona (retorna imediatamente com um ID que você pode monitorar)

Configurações

Configurações genéricas de backup e restauração
ConfiguraçãoDescriçãoValor padrão
idID da operação de backup ou de restauração; se não for especificado, será usado um UUID gerado aleatoriamente. Se já houver uma operação em execução com o mesmo ID, uma exceção será lançada.
compression_methodEspecifica o método de compressão para o backup. Consulte a seção “codecs de compressão de coluna”
compression_levelEspecifica o nível de compressão do backup
passwordSenha do arquivo de backup. Suportado apenas para arquivos ZIP (.zip, .zipx).
base_backupO destino do backup base usado em backups incrementais. Por exemplo: Disk('backups', '1.zip')
use_same_password_for_base_backupIndica se o arquivo do backup base deve herdar a senha da consulta.
structure_onlySe habilitado, faz backup ou restaura apenas as instruções CREATE, sem os dados da tabela.
storage_policyPolítica de armazenamento para as tabelas que estão sendo restauradas. Consulte “uso de vários dispositivos de bloco para armazenar dados. Aplicável apenas ao comando RESTORE. Aplica-se somente a tabelas com um engine da família MergeTree.
allow_non_empty_tablesPermite que RESTORE TABLE insira dados em tabelas não vazias. Isso combinará os dados já existentes na tabela com os dados extraídos do backup. Portanto, essa configuração pode causar duplicação de dados na tabela; use com cautela.0
backup_restore_keeper_max_retriesNúmero máximo de tentativas para operações do [Zoo]Keeper no decorrer de uma operação de BACKUP ou RESTORE. Deve ser alto o suficiente para que toda a operação não falhe por causa de uma falha temporária do [Zoo]Keeper.1000
backup_restore_keeper_retry_initial_backoff_msTimeout de backoff inicial para operações do [Zoo]Keeper durante backup ou restore100
backup_restore_keeper_retry_max_backoff_msTimeout máximo de backoff para operações do [Zoo]Keeper durante backup ou restore5000
backup_restore_failure_after_host_disconnected_for_secondsSe um host, durante uma operação BACKUP ON CLUSTER ou RESTORE ON CLUSTER, não recriar seu nó efêmero ‘alive’ no ZooKeeper dentro desse período, todo o backup ou restore será considerado como falho. Esse valor deve ser maior do que qualquer tempo razoável para um host se reconectar ao ZooKeeper após uma falha. Zero significa ilimitado.3600
backup_restore_keeper_max_retries_while_initializingMáximo de novas tentativas para operações do [Zoo]Keeper durante a inicialização de uma operação BACKUP ON CLUSTER ou RESTORE ON CLUSTER.20
backup_restore_keeper_max_retries_while_handling_errorNúmero máximo de tentativas para operações do [Zoo]Keeper ao tratar um erro em uma operação BACKUP ON CLUSTER ou RESTORE ON CLUSTER.20
backup_restore_finish_timeout_after_error_secPor quanto tempo o initiator deve esperar que os outros hosts reajam ao nó ‘error’ e interrompam seu trabalho na operação atual de BACKUP ON CLUSTER ou RESTORE ON CLUSTER.180
backup_restore_keeper_value_max_sizeTamanho máximo dos dados de um nó do [Zoo]Keeper durante o backup1048576
backup_restore_batch_size_for_keeper_multiTamanho máximo do lote para solicitação múltipla ao [Zoo]Keeper durante backup ou restauração1000
backup_restore_batch_size_for_keeper_multireadTamanho máximo do lote para solicitação de multileitura ao [Zoo]Keeper durante backup ou restauração10000
backup_restore_keeper_fault_injection_probabilityProbabilidade aproximada de falha de uma solicitação ao Keeper durante o backup ou a restauração. O valor válido está no intervalo [0.0f, 1.0f]0
backup_restore_keeper_fault_injection_seed0 para uma semente aleatória; caso contrário, o valor da configuração0
backup_restore_s3_retry_attemptsConfiguração de Aws::Client::RetryStrategy; o Aws::Client faz as novas tentativas por conta própria, e 0 significa nenhuma nova tentativa. Isso se aplica apenas a backup/restauração.1000
max_backup_bandwidthVelocidade máxima de leitura, em bytes por segundo, para um backup específico no servidor. Zero significa ilimitada.0
max_backups_io_thread_pool_sizeO ClickHouse usa threads do pool de threads de E/S de backups para realizar operações de E/S de backup no S3. max_backups_io_thread_pool_size limita o número máximo de threads no pool.1000
max_backups_io_thread_pool_free_sizeSe o número de threads ociosas no Backups IO Thread pool exceder max_backup_io_thread_pool_free_size, ClickHouse liberará os recursos ocupados pelas threads ociosas e reduzirá o tamanho do pool. As threads poderão ser criadas novamente, se necessário.0
backups_io_thread_pool_queue_sizeO número máximo de jobs que podem ser agendados no Backups IO Thread pool. Recomenda-se manter esta fila sem limite devido à lógica atual de backups no S3. Observação: um valor de 0 (padrão) significa sem limite.0
backup_threadsO número máximo de threads para executar comandos BACKUP.
max_backup_bandwidth_for_serverA velocidade máxima de leitura, em bytes por segundo, para todos os backups no servidor. Zero significa ilimitado.0
shutdown_wait_backups_and_restoresSe definido como true, o ClickHouse aguardará a conclusão dos backups e restaurações em execução antes de ser desligado.1
Configurações específicas do S3
ConfiguraçãoDescriçãoValor padrão
use_same_s3_credentials_for_base_backupSe o backup base no S3 deve herdar as credenciais da consulta. Funciona apenas com S3.
s3_storage_classA classe de armazenamento usada para backup no S3. Por exemplo: STANDARD
Configurações específicas do Azure
ConfiguraçãoDescriçãoValor padrão
azure_attempt_to_create_containerAo usar o Azure Blob Storage, indica se deve haver uma tentativa de criar o contêiner especificado caso ele não exista.true

Administração e solução de problemas

O comando de backup retorna um id e um status, e esse id pode ser usado para consultar o status do backup. Isso é muito útil para verificar o andamento de backups longos ASYNC. O exemplo abaixo mostra uma falha que ocorreu ao tentar sobrescrever um arquivo de backup existente:
BACKUP TABLE helloworld.my_first_table TO Disk('backups', '1.zip') ASYNC
┌─id───────────────────────────────────┬─status──────────┐
│ 7678b0b3-f519-4e6e-811f-5a0781a4eb52 │ CREATING_BACKUP │
└──────────────────────────────────────┴─────────────────┘

1 row in set. Elapsed: 0.001 sec.
SELECT
*
FROM system.backups
WHERE id='7678b0b3-f519-4e6e-811f-5a0781a4eb52'
FORMAT Vertical
Row 1:
──────
id:                7678b0b3-f519-4e6e-811f-5a0781a4eb52
name:              Disk('backups', '1.zip')
status:            BACKUP_FAILED
num_files:         0
uncompressed_size: 0
compressed_size:   0
error:             Code: 598. DB::Exception: Backup Disk('backups', '1.zip') already exists. (BACKUP_ALREADY_EXISTS) (version 22.8.2.11 (official build))
start_time:        2022-08-30 09:21:46
end_time:          2022-08-30 09:21:46

1 row in set. Elapsed: 0.002 sec.
Além da tabela system.backups, todas as operações de backup e restauração também são registradas na tabela de log do sistema system.backup_log:
SELECT *
FROM system.backup_log
WHERE id = '7678b0b3-f519-4e6e-811f-5a0781a4eb52'
ORDER BY event_time_microseconds ASC
FORMAT Vertical
Row 1:
──────
event_date:              2023-08-18
event_time_microseconds: 2023-08-18 11:13:43.097414
id:                      7678b0b3-f519-4e6e-811f-5a0781a4eb52
name:                    Disk('backups', '1.zip')
status:                  CREATING_BACKUP
error:
start_time:              2023-08-18 11:13:43
end_time:                1970-01-01 03:00:00
num_files:               0
total_size:              0
num_entries:             0
uncompressed_size:       0
compressed_size:         0
files_read:              0
bytes_read:              0

Row 2:
──────
event_date:              2023-08-18
event_time_microseconds: 2023-08-18 11:13:43.174782
id:                      7678b0b3-f519-4e6e-811f-5a0781a4eb52
name:                    Disk('backups', '1.zip')
status:                  BACKUP_FAILED
error:                   Code: 598. DB::Exception: Backup Disk('backups', '1.zip') already exists. (BACKUP_ALREADY_EXISTS) (version 23.8.1.1)
start_time:              2023-08-18 11:13:43
end_time:                2023-08-18 11:13:43
num_files:               0
total_size:              0
num_entries:             0
uncompressed_size:       0
compressed_size:         0
files_read:              0
bytes_read:              0

2 rows in set. Elapsed: 0.075 sec.
Última modificação em 10 de junho de 2026