Nas últimas quatro postagens da série de blogs, abordamos a implantação de clustering/replicação (MySQL/Galera, MySQL Replication, MongoDB e PostgreSQL), gerenciamento e monitoramento de seus bancos de dados e clusters existentes, monitoramento de desempenho e integridade e, na última postagem, como tornar sua configuração altamente disponível por meio de HAProxy e ProxySQL.
Então, agora que você tem seus bancos de dados funcionando e altamente disponíveis, como você garante que tem backups de seus dados?
Você pode usar backups para várias coisas:recuperação de desastres, fornecer dados de produção para testar em relação ao desenvolvimento ou até mesmo provisionar um nó escravo. Este último caso já está coberto pelo ClusterControl. Quando você adiciona um novo nó (réplica) à sua configuração de replicação, o ClusterControl fará um backup/instantâneo do nó mestre e o usará para construir a réplica. Ele também pode usar um backup existente para preparar a réplica, caso você queira evitar essa carga extra no mestre. Depois que o backup for extraído, preparado e o banco de dados estiver funcionando, o ClusterControl configurará automaticamente a replicação.
Criando um backup instantâneo
Em essência, criar um backup é o mesmo para Galera, replicação MySQL, PostgreSQL e MongoDB. Você pode encontrar a seção de backup em ClusterControl> Backup e por padrão você veria uma lista de backup criado do cluster (se houver). Caso contrário, você verá um espaço reservado para criar um backup:
A partir daqui, você pode clicar no botão "Criar backup" para fazer um backup instantâneo ou agendar um novo backup:
Todos os backups criados também podem ser carregados para a nuvem alternando "Fazer upload de backup para a nuvem", desde que você forneça credenciais de nuvem de trabalho. Por padrão, todos os backups com mais de 31 dias serão excluídos (configurável por meio das configurações de retenção de backup) ou você pode optar por mantê-lo para sempre ou definir um período personalizado.
"Criar backup" e "Agendar backup" compartilham opções semelhantes, exceto a parte de agendamento e as opções de backup incremental para o último. Portanto, vamos analisar o recurso Criar Backup (também conhecido como backup instantâneo) com mais profundidade.
Como todos esses vários bancos de dados têm ferramentas de backup diferentes, obviamente há alguma diferença nas opções que você pode escolher. Por exemplo, com o MySQL, você pode escolher entre mysqldump e xtrabackup (completo e incremental). Para MongoDB, ClusterControl suporta mongodump e mongodb-consistent-backup (beta), enquanto PostgreSQL, pg_dump e pg_basebackup são suportados. Em caso de dúvida sobre qual escolher para o MySQL, confira este blog sobre as diferenças e casos de uso para mysqldump e xtrabackup.
Fazendo backup do MySQL e Galera
Como mencionado no parágrafo anterior, você pode fazer backups do MySQL usando mysqldump ou xtrabackup (completo ou incremental). No assistente "Criar backup", você pode escolher em qual host deseja executar o backup, o local onde deseja armazenar os arquivos de backup e seu diretório e esquemas específicos (xtrabackup) ou esquemas e tabelas (mysqldump).
Se o nó que você está fazendo backup está recebendo tráfego (produção) e você tem medo de que as gravações extras em disco se tornem intrusivas, é aconselhável enviar os backups para o host ClusterControl escolhendo a opção "Store on Controller". Isso fará com que o backup transmita os arquivos pela rede para o host ClusterControl e você deve certificar-se de que há espaço suficiente disponível neste nó e que a porta de streaming esteja aberta no host ClusterControl.
Existem também várias outras opções se você deseja usar a compactação e o nível de compactação. Quanto maior o nível de compactação, menor será o tamanho do backup. No entanto, requer maior uso da CPU para o processo de compactação e descompactação.
Se você escolher o xtrabackup como o método para o backup, ele abrirá opções extras:dessincronização, bloqueios de backup, compactação e threads paralelos xtrabackup/gzip. A opção desync só é aplicável para dessincronizar um nó de um cluster Galera. Os bloqueios de backup usam um novo tipo de bloqueio MDL para bloquear atualizações em tabelas não transacionais e instruções DDL para todas as tabelas, o que é mais eficiente para a carga de trabalho específica do InnoDB. Se você estiver executando no Galera Cluster, é recomendável habilitar esta opção.
Depois de agendar um backup instantâneo, você pode acompanhar o andamento do trabalho de backup em Atividade> Trabalhos :
Depois que terminar, você poderá ver uma nova entrada na lista de backup.
Fazendo backup do PostgreSQL
Semelhante aos backups instantâneos do MySQL, você pode executar um backup em seu banco de dados Postgres. Com os backups do Postgres existem dois métodos de backup suportados - pg_dumpall ou pg_basebackup. Observe que o ClusterControl sempre realizará um backup completo, independentemente do método de backup escolhido.
Cobrimos este aspecto nestes detalhes em Torne-se um DBA PostgreSQL - Backups PostgreSQL Lógicos e Físicos.
Fazendo backup do MongoDB
Para o MongoDB, o ClusterControl suporta o mongodump padrão e o mongodb-consistent-backup desenvolvidos pela Percona. O último ainda está na versão beta, que fornece backups pontuais consistentes em cluster do MongoDB adequados para configurações de cluster fragmentado. Como o cluster do MongoDB fragmentado consiste em vários conjuntos de réplicas, um conjunto de réplicas de configuração e servidores de fragmentos, é muito difícil fazer um backup consistente usando apenas o mongodump.
Observe que no assistente, você não precisa escolher um nó de banco de dados para fazer backup. O ClusterControl selecionará automaticamente a réplica secundária mais íntegra como o nó de backup. Caso contrário, o primário será selecionado. Quando o backup estiver em execução, o nó de backup selecionado será bloqueado até que o processo de backup seja concluído.
Agendando backups
Agora que brincamos com a criação de backups instantâneos, agora podemos estender isso agendando os backups.
O agendamento é muito fácil de fazer:você pode selecionar em quais dias o backup deve ser feito e em que horário ele precisa ser executado.
Para xtrabackup existe um recurso adicional:backups incrementais. Um backup incremental fará backup apenas dos dados alterados desde o último backup. Obviamente, os backups incrementais são inúteis se não houver um backup completo como ponto de partida. Entre dois backups completos, você pode ter quantos backups incrementais desejar. Mas restaurá-los levará mais tempo.
Uma vez agendado(s) o(s) trabalho(s) deve(m) ficar visível(s) na aba "Backup Agendado" e você pode editá-los clicando no botão "Editar". Assim como os backups instantâneos, esses trabalhos agendarão a criação de um backup e você poderá acompanhar o progresso na guia Atividade.
Lista de backup
Você pode encontrar a Lista de Backup em ClusterControl> Backup e isso lhe dará uma visão geral em nível de cluster de todos os backups feitos. Clicar em cada entrada expandirá a linha e exibirá mais informações sobre o backup:
Cada backup é acompanhado de um log de backup quando o ClusterControl executou o trabalho, que está disponível no botão "Mais ações".
Backup externo na nuvem
Como agora temos muitos backups armazenados nos hosts do banco de dados ou no host ClusterControl, também queremos garantir que eles não se percam caso enfrentemos uma interrupção total da infraestrutura. (por exemplo, DC em chamas ou inundado) Portanto, o ClusterControl permite que você armazene ou copie seus backups fora do local na nuvem. As plataformas de nuvem suportadas são Amazon S3, Google Cloud Storage e Azure Cloud Storage.
O processo de upload acontece logo após o backup ser criado com sucesso (se você alternar "Upload Backup to the Cloud") ou você pode clicar manualmente no botão do ícone da nuvem da lista de backups:
Escolha a credencial de nuvem e especifique o local de backup de acordo:
Restaurar e/ou verificar backup
Na interface da lista de backup, você pode restaurar diretamente um backup para um host no cluster clicando no botão "Restaurar" para o backup específico ou clicando no botão "Restaurar backup":
Um recurso interessante é que ele é capaz de restaurar um nó ou cluster usando os backups completos e incrementais, pois acompanhará o último backup completo feito e iniciará o backup incremental a partir daí. Em seguida, ele agrupará um backup completo com todos os backups incrementais até o próximo backup completo. Isso permite restaurar a partir do backup completo e aplicar os backups incrementais sobre ele.
O ClusterControl suporta restauração em um nó de banco de dados existente ou restauração e verificação em um novo host autônomo:
Essas duas opções são bastante semelhantes, exceto que a verificação tem opções extras para as novas informações do host. Se você seguir o assistente de restauração, precisará especificar um novo host. Se "Instalar software de banco de dados" estiver ativado, o ClusterControl removerá qualquer instalação MySQL existente no host de destino e reinstalará o software de banco de dados com a mesma versão do servidor MySQL existente.
Depois que o backup for restaurado e verificado, você receberá uma notificação sobre o status da restauração e o nó será desligado automaticamente.
Recuperação pontual
Para MySQL, tanto o xtrabackup quanto o mysqldump podem ser usados para realizar a recuperação pontual e também para provisionar um novo escravo de replicação para replicação mestre-escravo ou Galera Cluster. Um backup compatível com mysqldump PITR contém um único arquivo de despejo, com informações do GTID, arquivo binlog e posição. Assim, apenas o nó do banco de dados que produz o log binário terá disponível a opção "compatível com PITR":
Quando a opção compatível com PITR é alternada, os campos do banco de dados e da tabela ficam acinzentados, pois o ClusterControl sempre realizará um backup completo de todos os bancos de dados, eventos, gatilhos e rotinas do servidor MySQL de destino.
Agora restaurando o backup. Caso o backup seja compatível com PITR, será apresentada uma opção para realizar uma Recuperação Point-In-Time. Você terá duas opções para isso - "Baseado no tempo" e "Baseado na posição". Para “Time Based”, você pode simplesmente passar o dia e a hora. Para “Baseado em Posição”, você pode passar a posição exata para onde deseja restaurar. É uma maneira mais precisa de restaurar, embora você possa precisar obter a posição do log binário usando o utilitário mysqlbinlog. Mais detalhes sobre a recuperação pontual podem ser encontrados neste blog.
Criptografia de backup
Universalmente, o ClusterControl suporta criptografia de backup para MySQL, MongoDB e PostgreSQL. Os backups são criptografados em repouso usando o algoritmo AES-256 CBC. Uma chave gerada automaticamente será armazenada no arquivo de configuração do cluster em /etc/cmon.d/cmon_X.cnf (onde X é o ID do cluster):
$ sudo grep backup_encryption_key /etc/cmon.d/cmon_1.cnf
backup_encryption_key='JevKc23MUIsiWLf2gJWq/IQ1BssGSM9wdVLb+gRGUv0='
Se o destino do backup não for local, os arquivos de backup serão transferidos em formato criptografado. Esse recurso complementa o backup offsite na nuvem, onde não temos acesso total ao sistema de armazenamento subjacente.
Considerações finais
Mostramos a você como fazer backup de seus dados e como armazená-los com segurança fora do local. A recuperação é sempre uma coisa diferente. O ClusterControl pode recuperar automaticamente seus bancos de dados dos backups feitos no passado que são armazenados no local ou copiados da nuvem.
Obviamente, há mais para proteger seus dados, especialmente no lado de proteger suas conexões. Abordaremos isso no próximo post do blog!