A migração de banco de dados é o processo de migração de dados de um ou mais bancos de dados de origem para um ou mais bancos de dados de destino usando um serviço ou ferramenta. Existem diferentes tipos de migração. Você pode migrar de uma tecnologia para outra, para um datacenter diferente ou para a nuvem, ou até mesmo do mesmo local e mesma tecnologia para outra máquina. A melhor ferramenta para uma migração do PostgreSQL depende do tipo de migração e requisitos como disponibilidade ou tolerância de tempo de inatividade, e às vezes é difícil encontrar a melhor ferramenta para fazer o trabalho.
Neste blog, mencionaremos algumas ferramentas de código aberto para migrações do PostgreSQL com uma breve visão geral de cada opção.
Ferramentas de migração de backup e restauração
Esta pode ser a maneira mais fácil de realizar uma migração de dados, mas também a mais lenta em termos de Objetivo de Tempo de Recuperação (RTO). Usar esse método significa que você fará um backup do seu banco de dados atual, provavelmente um backup lógico se desejar restaurá-lo em uma versão ou infraestrutura diferente, copiar o dump e restaurá-lo no novo servidor. Dependendo da quantidade de dados, pode levar muito tempo, mas é a maneira básica de migrar seu banco de dados. Vejamos algumas ferramentas para isso.
pgdump/pgdumpall
pg_dump é um utilitário para fazer backup de um único banco de dados PostgreSQL. Faz backups consistentes mesmo que o banco de dados esteja sendo usado simultaneamente, pois não bloqueia outros usuários. Para fazer backup de um cluster inteiro ou de objetos globais comuns a todos os bancos de dados em um cluster (como funções e espaços de tabela), você deve usar pg_dumpall.
Os dumps podem ser gerados em formatos de arquivo de script ou archive. Os dumps de script são arquivos de texto simples contendo os comandos SQL necessários para reconstruir o banco de dados para o estado em que estava no momento em que foi salvo. Ele pode ser usado para reconstruir o banco de dados em outras máquinas, outras arquiteturas ou até mesmo em outros produtos de banco de dados SQL.
pg_basebackup
pg_basebackup é usado para fazer um backup básico de um cluster de banco de dados PostgreSQL em execução. O backup é feito sem afetar outros clientes de banco de dados e pode ser usado tanto para PITR (Point-In-Time-Recovery) quanto como ponto de partida de um servidor em espera de Replicação de Streaming. Ele faz uma cópia exata dos arquivos do cluster de banco de dados enquanto garante que o servidor seja colocado e retirado do modo de backup automaticamente. Os backups são sempre feitos de todo o cluster de banco de dados; não é possível fazer backup de bancos de dados individuais ou objetos de banco de dados.
pgBackRest
pgBackRest é uma ferramenta de backup de código aberto que cria backups físicos com algumas melhorias em comparação com a ferramenta clássica pg_basebackup. Você pode usar pgBackRest para executar uma cópia inicial do banco de dados para Streaming Replication usando um backup existente ou pode usar a opção delta para reconstruir um servidor em espera antigo.
Alguns dos recursos mais importantes do pgBackRest são:
- Backup e restauração paralelos
- Operação local ou remota
- Backups completos, incrementais e diferenciais
- Rotação de backup e expiração do arquivo
- Verificação de integridade do backup
- Currículo de backup
- Restauração Delta
- Criptografia
Ferramentas de migração do PostgreSQL
Ao invés de usar uma ferramenta de backup, existem diferentes utilitários para realizar essa migração de forma mais rápida, com diferentes métodos. Ele pode usar uma abordagem ETL ou até mesmo configurar a replicação entre diferentes tecnologias de banco de dados usando o mesmo conceito de Extrair - Transformar - Carregar. Vejamos algumas dessas ferramentas.
pg_chameleon
pg_chameleon é um sistema de réplica MySQL para PostgreSQL. Ele pode se conectar ao protocolo de replicação MySQL e replicar as alterações de dados no PostgreSQL. Se o usuário precisa configurar uma réplica permanente entre MySQL e PostgreSQL, ou realizar uma migração de mecanismo, pg_chameleon é uma boa opção para a tarefa.
Os principais recursos são:
- Ler de vários esquemas MySQL e restaurá-los em um banco de dados PostgreSQL de destino
- Configure o PostgreSQL para atuar como um escravo do MySQL
- Suporte básico a DDL (CREATE/DROP/ALTER TABLE, DROP PRIMARY KEY/TRUNCATE, RENAME)
- As tabelas que geram erros são excluídas automaticamente da réplica
- Possibilidade de atualizar tabelas únicas ou esquemas únicos
- Desanexar a réplica do MySQL para suporte à migração
- Substituição de tipo de dados
- Processo init_replica daemonizado
- Processo de réplica daemonizado com dois subprocessos separados, um para leitura e outro para reprodução
pgloader
pgloader carrega dados de várias fontes no PostgreSQL. Ele pode transformar os dados que lê em tempo real e enviar SQL bruto antes e depois do carregamento. Ele usa o protocolo COPY PostgreSQL para transmitir os dados para o servidor e gerencia os erros preenchendo um par de arquivos reject.dat e reject.log.
Graças ao poder carregar dados diretamente de uma fonte de banco de dados, o pgloader também suporta migrações de outros produtos para o PostgreSQL. Nesse modo de operação, o pgloader lida com as partes do esquema e dos dados da migração, em um único comando não tripulado, permitindo implementar a Migração Contínua.
Os principais recursos são:
- Muitos formatos de origem suportados, como arquivos CSV, db3 e IBM IXF
- Transformação de dados em tempo real
- Projeções de campo completo
- Leitura de arquivos compactados (zip, tar e gzip)
- Suporte HTTP(S)
- Descoberta de esquema de destino
- No erro, parar/retomar as próximas opções
- Comandos SQL pré/pós
- Migração de um comando
- Descoberta de esquema
- Regras de transmissão definidas pelo usuário
- Migrações parciais incluindo/excluindo tabelas
- Apenas esquema ou dados
- Visualizações materializadas ou reescrita de esquema dinamicamente
- Migração contínua
Ora2Pg
Ora2Pg é uma ferramenta gratuita usada para migrar um banco de dados Oracle ou MySQL para um esquema compatível com PostgreSQL. Ele conecta seu banco de dados atual, examina-o e extrai sua estrutura ou dados, então gera scripts SQL que você pode carregar em seu banco de dados PostgreSQL.
Os principais recursos são:
- Exportar esquema de banco de dados completo (tabelas, exibições, sequências, índices), com restrições de verificação e chave exclusivas, primárias e estrangeiras
- Exportar concessões/privilégios para usuários e grupos
- Exportar partições e subpartições de intervalo/lista
- Exportar uma seleção de tabela (especificando os nomes das tabelas).
- Exportar funções, gatilhos, procedimentos, pacotes e corpos de pacotes predefinidos
- Exporte dados completos ou siga uma cláusula WHERE
- Suporte total ao objeto Oracle BLOB como PG BYTEA
- Exportar visualizações do Oracle como tabelas PG
- Exportar tipos definidos pelo usuário do Oracle
- Forneça algumas conversões automáticas básicas de código PLSQL para PLPGSQL
- Exportar tabelas Oracle como tabelas de wrapper de dados externos
- Exportar visualização materializada
- Mostrar um relatório detalhado do conteúdo de um banco de dados Oracle
- Avaliação do custo de migração de um banco de dados Oracle
- Avaliação do nível de dificuldade de migração de um banco de dados Oracle
- Avaliação do custo de migração do código PL/SQL de um arquivo
- Avaliação do custo de migração de consultas Oracle SQL armazenadas em um arquivo
- Gere arquivos XML ktr para serem usados com o Penthalo Data Integrator (Kettle)
- Exportar localizador Oracle e geometrias espaciais para PostGis
- Exportar DBLINK como Oracle FDW
- Exportar SINÔNIMOS como visualizações
- Exportar DIRECTORY como uma tabela ou diretório externo para extensão de arquivo_externo
- Exportação completa do MySQL, assim como o banco de dados Oracle
Existem mais opções de ETL disponíveis, como Pentaho ou Talen, mas essas são mais orientadas à integração ou gerenciamento de dados do que à migração, portanto, não as descreveremos aqui para evitar uma extensa postagem no blog. Você pode encontrar mais informações aqui.
Replicação lógica do PostgreSQL para migrações
Replicação lógica é um método de replicação de objetos de dados e suas alterações, com base em sua identidade de replicação (geralmente uma chave primária). É baseado em um modo de publicação e assinatura, onde um ou mais assinantes assinam uma ou mais publicações em um nó publicador.
Uma publicação é um conjunto de alterações geradas a partir de uma tabela ou de um grupo de tabelas (também conhecido como conjunto de replicação). O nó onde uma publicação é definida é referido como publicador. Uma assinatura é o lado downstream da replicação lógica. O nó onde uma assinatura é definida é chamado de assinante e define a conexão com outro banco de dados e conjunto de publicações (uma ou mais) que deseja assinar. Os assinantes extraem dados das publicações que assinam.
Este método pode ser usado para migrar ou atualizar seu banco de dados PostgreSQL.
Para obter mais informações, você pode consultar a postagem do blog correspondente sobre como atualizar o PostgreSQL com tempo de inatividade zero.
Conclusão
As migrações são uma tarefa difícil e arriscada, pois você está movendo ou transformando dados de uma (ou mais) origem para um destino (ou mais de um), e é ainda pior se seu destino for um motor diferente. Portanto, você precisará ter um bom plano, com etapas detalhadas e, claro, um ambiente de teste para testar todas as etapas da migração. Neste blog, mencionamos algumas ferramentas para ajudar nessa tarefa, e a melhor escolha dependerá de suas necessidades quanto à disponibilidade do seu sistema.