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íliaMergeTree 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.
Os backups podem:
- ser completos ou incrementais
- ser síncronos ou assíncronos
- ser concorrentes ou não concorrentes
- ser compactados ou não compactados
- usar coleções nomeadas
- ser protegidos por senha
- incluir tabelas de sistema, tabelas de log ou tabelas de gerenciamento de acesso
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 comandosBACKUP 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:Backups compactados vs. não compactados
Os backups do ClickHouse suportam compactação por meio das configuraçõescompression_method e compression_level.
Ao criar um backup, você pode especificar:
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
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
Resumo dos comandos
Cada um dos comandos acima é detalhado a seguir:Fazer backup de uma tabela sem seus dados
EXCEPT DATA FROM {TABLE|TABLES} inclui no backup a definição de uma tabela, mas não suas linhas. Isso é útil
para tabelas cujo conteúdo pode ser regenerado após uma restauração, como as tabelas de destino de visões
materializadas.
A cláusula determina o que BACKUP grava, mas não altera o que RESTORE pode fazer com o resultado. Se
RESTORE puder recriar a tabela, a definição sem linhas será restaurada como uma tabela vazia. Isso não permite
restaurar uma tabela que, de outra forma, não poderia ser restaurada: a possibilidade de recriar uma tabela
a partir da definição no backup depende do motor, e alguns motores não permitem essa operação. Consulte
Motores que RESTORE não pode recriar.
A cláusula se aplica apenas ao elemento em que é especificada:
- Em um elemento
DATABASEouALL, ela pode indicar qualquer tabela incluída no backup por esse elemento:
table, dictionary, view, database ou all: após uma
vírgula, um nome sem crases é interpretado como o início do próximo elemento.
- Em um elemento que se refere a um único objeto (
TABLE,DICTIONARY,VIEW,TEMPORARY TABLE), somente o objeto desse elemento está no escopo; portanto, a cláusula deve especificar apenas esse objeto. Use um elemento e uma cláusula para cada tabela:
EXCEPT DATA FROM de um elemento mais abrangente,
seus dados são incluídos no backup: ao especificar uma tabela, o elemento também solicita seus dados. Isso segue o comportamento de EXCEPT TABLES,
em que uma tabela especificada explicitamente é incluída no backup mesmo que um elemento mais abrangente a exclua.
Os dados da tabela interna de uma visão materializada (ou das tabelas internas de uma tabela TimeSeries) são
excluídos pelo nome do objeto externo; a cláusula não aceita nomes de tabelas internas.
EXCEPT DATA FROM {TABLE|TABLES} só é válido para BACKUP. RESTORE rejeita essa cláusula, em vez de aceitá-la
como uma operação sem efeito.
Motores que RESTORE não consegue recriar
Alguns motores não podem ser recriados por RESTORE, com ou sem EXCEPT DATA FROM {TABLE|TABLES}. Para
essas tabelas, a cláusula ainda controla o tamanho do backup, mas não permite restaurá-las
vazias — a tabela não é restaurada, pois RESTORE se recusa a criá-la.
O caso a destacar é o de uma tabela MaterializedPostgreSQL independente. Assim que fosse criada, ela começaria
a replicar dados da origem PostgreSQL ativa, misturando o snapshot do backup com o estado remoto atual. Por isso,
RESTORE a rejeita na fábrica de armazenamento — antes que a tabela seja criada — com NOT_IMPLEMENTED. Essa é uma
característica do motor e também se aplica a um backup completo comum.
O procedimento aceito é restaurar com outro nome, em uma tabela ReplacingMergeTree criada
previamente com a estrutura da tabela aninhada (incluindo as colunas _sign e _version):
allow_different_table_def é necessário porque a definição armazenada no backup usa o
motor MaterializedPostgreSQL, mas a restauração é feita intencionalmente em um ReplacingMergeTree comum.
Sem EXCEPT DATA FROM TABLE, o mesmo RESTORE também restaura as linhas.
Configurações
Configurações genéricas de backup e restauração
Configurações específicas do S3
Configurações específicas do Azure
Administração e solução de problemas
O comando de backup retorna umid 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:
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: