Migrar banco de dados PostgreSQL local para o Azure
Quando uma empresa toma a decisão de migrar para o Banco de Dados do Azure para PostgreSQL, a próxima etapa é planejar como migrar bancos de dados locais e escolher as ferramentas para mover seus dados.
Depois de explorar como o Banco de Dados do Azure para PostgreSQL dá suporte e dimensiona o PostgreSQL no Azure, agora você deseja considerar como migrará seus bancos de dados locais existentes.
Nesta unidade, você verá como criar uma instância do serviço Banco de Dados do Azure para PostgreSQL usando o portal do Azure. Se você precisar criar muitas instâncias desse serviço, poderá criar scripts para o processo usando a CLI do Azure.
Criar um Banco de Dados do Azure para servidores flexíveis PostgreSQL
No portal do Azure, digite Banco de Dados do Azure para servidores flexíveis PostgreSQL na caixa de pesquisa e selecione Banco de Dados do Azure para servidores flexíveis PostgreSQL.
Selecione Criar na folha principal do servidor flexível, insira os detalhes do serviço. Estes detalhes incluem:
Grupo de recursos. Grupo de recursos para o servidor.
Nome do servidor. Deve ser um nome exclusivo entre 3 e 63 caracteres, contendo apenas letras minúsculas, números e hífenes.
Região. Região para o servidor.
Versão do PostgreSQL: selecione a versão que corresponde ao banco de dados local que você está migrando.
Tipo de carga de trabalho. Selecione a opção com base na sua carga de trabalho.
-
- Computação + armazenamento. Selecione Configurar servidor para definir a camada de preço e especificar os recursos necessários para o serviço. As opções foram abordadas na Lição 1. Lembre-se de que, se você selecionar os níveis de preços de uso geral ou otimizado para memória, poderá aumentar e diminuir o número de núcleos de processador virtual mais tarde. No entanto, não é possível reduzir a quantidade de armazenamento — ela só pode aumentar depois que o servidor for criado.
Nome de utilizador de administrador. O nome de uma conta de usuário que você criará com privilégios administrativos. O Azure cria algumas contas para seu próprio uso. Você não pode usar azure_superuser, azure_pg_admin, admin, administrator, root, guest, public ou qualquer nome que comece com pg_.
Palavra-passe. Deve ter entre 8 e 128 caracteres. Ele deve conter uma mistura de letras maiúsculas e minúsculas, números e caracteres não alfanuméricos.
Clique em Rever + Criar para implementar o serviço. A implantação levará vários minutos.
Depois que o serviço for implantado, selecione a opção Segurança da conexão e adicione as regras de firewall apropriadas para permitir que os clientes se conectem, conforme descrito no tópico Conectividade do cliente na Lição 1. Você também deve selecionar a opção Permitir acesso aos serviços do Azure.
Criar um Banco de Dados do Azure para instância PostgreSQL usando a CLI do Azure
Você pode criar uma instância do Banco de Dados do Azure para PostgreSQL usando o az postgres flexible-server create
comando. A instrução abaixo mostra um exemplo que cria uma instância de servidor flexível. A maioria dos parâmetros são autoexplicativos, exceto os seguintes:
- nome do sku. Você constrói isso a partir de uma combinação da camada de preços (B para Basic, GP para Uso Geral e MO para Memória Otimizada), a geração de computação (Gen4 ou Gen5) e o número de núcleos de CPU virtuais. No exemplo abaixo, o servidor é criado usando o nível de preço de uso geral, com 4 núcleos de CPU da geração Gen5.
- tamanho do armazenamento. Esta é a quantidade de armazenamento em disco necessária, especificada em megabytes. O exemplo a seguir aloca 10 gigabytes:
az postgres flexible-server create \ --location northeurope --resource-group testGroup \ --name testserver --admin-user username --admin-password password \ --sku-name Standard_B1ms --tier Burstable --public-access 153.24.26.117 --storage-size 128 \ --tags "key=value" --version 13 --high-availability Enabled --zone 1 \ --standby-zone 3
Realizar migração online
Você pode fazer uma migração online de uma instalação do PostgreSQL local para o Banco de Dados do Azure para PostgreSQL com o Serviço de Migração de Banco de Dados do Azure.
No cenário online, o Serviço de Migração de Banco de Dados do Azure copia todos os seus dados existentes para o Azure e, em seguida, executa continuamente uma operação de sincronização do banco de dados de origem. Todas as novas transações executadas no sistema local são copiadas para o novo banco de dados no Azure. Esse processo continua até que você tenha reconfigurado seus aplicativos cliente para usar o novo banco de dados no Azure, momento em que você encerra a operação de sincronização.
Configurar o servidor de origem e exportar o esquema
A primeira etapa na execução de uma migração on-line é preparar o servidor de origem para oferecer suporte ao registro completo de write-ahead. No servidor de origem, edite o arquivo postgresql.config e configure os seguintes parâmetros de log write-ahead. Para alterar esses parâmetros, reinicie o servidor — faça isso apenas quando se espera que o sistema esteja inativo:
wal_level = logical
max_replication_slots = 5
max_wal_senders = 10
Depois de reiniciar o servidor, exporte o esquema para o banco de dados de origem usando o utilitário pg_dump:
pg_dump -o -h [server host] -U [user name] -d [database name] -s > db_schema.sql
Finalmente, faça uma lista de todas as extensões que seu banco de dados usa. Você precisará habilitar essas extensões no banco de dados de destino. Para fazer isso, use o comando \dx plsql ou execute a seguinte consulta:
SELECT *
FROM pg_extension;
Criar um banco de dados de destino e importar o esquema
A próxima etapa é criar um banco de dados de destino em seu banco de dados do Azure para serviço PostgreSQL. Você usa uma ferramenta familiar, como pgAdmin, para se conectar ao servidor ou pode usar a CLI do Azure no exemplo a seguir:
az postgres db create \
--name [database name] \
--server-name [server name] \
--resource-group [azure resource group]
No banco de dados de destino, habilite todas as extensões usadas pelo banco de dados de códigos-fonte.
Importe o esquema para o banco de dados de destino. Na máquina que contém o arquivo db_schema.sql, execute o seguinte comando:
psql -h [Azure Database for PostgreSQL host] -U [user name] -d [database name] -f db_schema.sql
Remova todas as referências de chave estrangeira no banco de dados de destino. Você precisa dessa etapa porque os dados não serão necessariamente migrados em nenhuma sequência específica, possivelmente solicitando violações de integridade referencial que farão com que o processo de migração falhe. No entanto, você deve fazer um registro de todas as chaves estrangeiras, pois precisará recriá-las mais tarde. Execute a seguinte instrução SQL usando o utilitário psql para localizar todas as chaves estrangeiras em seu banco de dados e gerar um script que as remova:
SELECT Queries.tablename
,concat('alter table ', Queries.tablename, ' ', STRING_AGG(concat('DROP CONSTRAINT ', Queries.foreignkey), ',')) as DropQuery
,concat('alter table ', Queries.tablename, ' ',
STRING_AGG(concat('ADD CONSTRAINT ', Queries.foreignkey, ' FOREIGN KEY (', column_name, ')', 'REFERENCES ', foreign_table_name, '(', foreign_column_name, ')' ), ',')) as AddQuery
FROM
(SELECT
tc.table_schema,
tc.constraint_name as foreignkey,
tc.table_name as tableName,
kcu.column_name,
ccu.table_schema AS foreign_table_schema,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM
information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
AND tc.table_schema = kcu.table_schema
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
AND ccu.table_schema = tc.table_schema
WHERE constraint_type = 'FOREIGN KEY') Queries
GROUP BY Queries.tablename;
Desative todos os gatilhos no banco de dados de destino — há dois motivos para isso:
- Ajuda a otimizar o processo de migração à medida que os dados são copiados.
- Os gatilhos são frequentemente usados para implementar formas complexas de integridade referencial e, pelas razões descritas anteriormente, esse tipo de verificação de integridade pode falhar enquanto os dados estão sendo transferidos. Use a seguinte instrução SQL para localizar todos os gatilhos em seu banco de dados e gerar um script que os desabilita:
SELECT concat ('alter table ', event_object_table, ' disable trigger ', trigger_name) FROM information_schema.triggers;
Nota
Você pode encontrar o texto para um gatilho usando o comando \df+ no psql.
Criar uma instância do Azure Database Migration Service
No portal do Azure, agora você pode criar uma instância do Serviço de Migração de Banco de Dados do Azure.
Antes de criar uma instância do Serviço de Migração de Banco de Dados do Azure, você deve registrar o provedor de recursos Microsoft.DataMigration com sua assinatura. Você pode fazer isso da seguinte maneira:
- Na barra de menus esquerda do portal do Azure, selecione Todos os serviços.
- Na página Todos os serviços , selecione Assinaturas.
- Na página Subscrições, selecione a sua subscrição.
- Na página da sua subscrição, em Definições, selecione Fornecedores de recursos.
- Na caixa Filtrar por nome, digite DataMigration e selecione Microsoft.DataMigration.
- Selecione Registrar e aguarde até que o Status mude para Registrado. Talvez seja necessário selecionar Atualizar para ver qual status alterar.
Quando o provedor de recursos é registrado, você pode criar o serviço. Selecione o comando Criar um recurso na barra de menus à esquerda e procure Serviço de Migração de Banco de Dados do Azure.
Na página Criar Serviço de Migração, insira um nome para sua instância do serviço, especifique a assinatura — essa deve ser a mesma assinatura contra a qual você registrou o provedor de recursos —, o grupo de recursos e o local. Você também deve fornecer uma rede virtual porque o Serviço de Migração de Banco de Dados depende de um firewall criado para essa rede virtual para fornecer a proteção necessária. Se você estiver migrando bancos de dados de máquinas virtuais do Azure, poderá colocar o Serviço de Migração de Banco de Dados na mesma rede virtual usada por essas máquinas virtuais. A camada de preço determina o número de núcleos de processador virtual disponíveis para o serviço. Se você quiser fazer uma migração online, você deve selecionar a camada Premium, a camada Standard suporta apenas a migração offline.
Aguarde até que o serviço seja implantado antes de continuar. Esta operação demorará alguns minutos.
Criar um projeto de migração usando o Serviço de Migração de Banco de Dados
Agora você pode usar sua instância do Serviço de Migração de Banco de Dados para executar uma migração online. Para fazer isso, crie um novo projeto de migração de banco de dados. Vá para a página da instância do serviço de migração e selecione Novo projeto de migração.
Na página Novo projeto de migração, defina o tipo de servidor de origem como PostgreSQL, defina o tipo de servidor de destino como Banco de Dados do Azure para PostgreSQL e selecione Migração de dados online. A página Tipo de atividade lista as etapas que você deve executar no servidor de origem para habilitar a migração online. O texto na parte inferior da página Novo projeto de migração descreve o processo de migração do esquema para o destino.
Verifique se você concluiu essas etapas e selecione Criar e executar atividade.
Criar e executar uma atividade de migração
O novo projeto de migração inicia um assistente que o orienta pelo processo. Você fornece os seguintes detalhes:
- Na página Adicionar Detalhes da Fonte, o endereço do servidor de origem, o banco de dados de origem e uma conta que pode se conectar a esse banco de dados e recuperar os dados. A conta deve ter privilégios de SUPERUSUÁRIO para executar a migração.
- Na página Detalhes do destino, especifique o endereço do seu serviço Banco de Dados do Azure para PostgreSQL, o banco de dados para o qual você deseja migrar os dados e os detalhes de uma conta que tenha direitos administrativos.
- Na página Mapear para bancos de dados de destino, selecione o banco de dados de origem e o banco de dados de destino. Você pode migrar um único banco de dados ou vários bancos de dados.
- Na página Configurações de migração , especifique as configurações adicionais que deseja definir, como o número máximo de tabelas a serem carregadas em paralelo.
- Na página Resumo da migração, insira um nome para a atividade e selecione Executar migração.
A página de status da atividade é exibida mostrando o progresso da migração e todos os erros que ocorreram. Se a migração falhar, corrija os problemas e tente novamente a atividade. Se você estiver fazendo uma migração online, o status será alterado para Pronto para transferência após a transferência dos dados existentes. No entanto, a atividade continua em execução, para transferir quaisquer alterações adicionais que aparecem enquanto os aplicativos ainda estão usando ativamente o banco de dados original.
Restabelecer chaves e gatilhos estrangeiros
Neste ponto, você transferiu os dados e os aplicativos podem começar a usá-los. Você deve recriar as chaves estrangeiras removidas antes de migrar os dados e restabelecer quaisquer gatilhos. Se alguns aplicativos ainda estiverem conectados ao banco de dados original, o log de gravação antecipada garante que o banco de dados de destino no Azure seja mantido atualizado. O registro em log write-ahead não será afetado negativamente por chaves e gatilhos externos.
Transferir para a nova base de dados
Quando todos os aplicativos tiverem sido alternados para o novo banco de dados, você concluirá o processo de migração e passará para o novo banco de dados. Na página de status da atividade, selecione o nome do banco de dados que está sendo migrado para ver um resumo do trabalho executado.
Selecione Iniciar substituição. Você verá uma página solicitando a confirmação de que a operação foi concluída. Neste ponto, todas as entradas restantes do log write-ahead para o banco de dados de origem serão drenadas e as atualizações serão interrompidas. Quaisquer alterações adicionais feitas no banco de dados de origem não serão propagadas.
Executar migração offline
Uma migração offline tira um "instantâneo" do banco de dados de origem em um determinado momento e copia esses dados para o banco de dados de destino. Quaisquer alterações feitas nos dados de origem após a captura instantânea não serão refletidas no banco de dados de destino.
Você tem pelo menos duas opções se quiser executar uma migração offline para o Banco de Dados do Azure para PostgreSQL ou para um servidor PostgreSQL em execução em outro lugar, como uma máquina virtual do Azure:
- Exporte o esquema e os dados do banco de dados de origem usando o utilitário pg_dump e importe o esquema e os dados para o banco de dados de destino usando o utilitário psql. Essa técnica permite modificar, reformatar e limpar o esquema e os dados, se necessário, antes de transferi-los para o banco de dados de destino.
- Despeje os dados do banco de dados de origem, novamente usando pg_dump, e restaure os dados no banco de dados de destino usando pg_restore. Essa técnica é mais rápida do que usar exportação e importação, mas os dados são despejados em um formato que não pode ser facilmente alterado. Use essa abordagem se não precisar ajustar o esquema ou os dados.
Nota
Atualmente, não é possível usar o Serviço de Migração de Banco de Dados do Azure para executar uma migração offline de um banco de dados PostgreSQL.
Migrar usando exportação e importação
Execute as etapas a seguir para migrar um banco de dados usando a abordagem de exportação e importação.
Exporte o esquema usando o comando pg_dump de um prompt bash:
pg_dump -o -h [source database server] -U [user name] -d [database] -s > db_schema.sql
Exporte os dados para outro arquivo com o comando pg_dump:
pg_dump -o -h [source database server] -U [user name] -d [database] -a > db_data.sql
Neste ponto, db_schema.sql e db_data.sql são scripts SQL que você modifica usando um editor de texto.
Crie o banco de dados de destino no Banco de Dados do Azure para PostgreSQL. Faça isso com a CLI do Azure:
az postgres db create \ --name [database name] \ --server-name [server name] \ --resource-group [azure resource group]
Importe o esquema para o banco de dados de destino com o comando psql:
psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_schema.sql
Importe os dados para o banco de dados de destino com o comando psql:
psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_data.sql
Migrar usando backup e restauração
Estas etapas descrevem o processo de migração de um banco de dados usando backup e restauração.
Faça backup do banco de dados — a partir de um prompt bash, execute o seguinte comando. Especifique o nome de um usuário que tenha os privilégios necessários para fazer backup do banco de dados:
pg_dump [database name] -h [source database server] -U [user name] -Fc > database_backup.bak
Crie o banco de dados de destino no Banco de Dados do Azure para PostgreSQL:
az postgres db create \ --name [database name] \ --server-name [server name] \ --resource-group [azure resource group] \
Restaure o backup no novo banco de dados com o comando pg_restore a partir de um prompt bash. Especifique o nome de um usuário com direitos administrativos em seu banco de dados do Azure para serviço PostgreSQL:
pg_restore -d [target database name] -h [server name in Azure Database for PostgreSQL] -Fc -U [user name] database_backup.bak