Migrar banco de dados PostgreSQL local para o Azure

Concluído

Depois que uma empresa toma a decisão de mudar 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 os próprios dados.

Tendo explorado como o Banco de Dados do Azure para PostgreSQL dá suporte e dimensiona o PostgreSQL no Azure, você deseja agora considerar como migrará seus atuais bancos de dados locais.

Nesta unidade, você verá como criar uma instância do serviço de Banco de Dados do Azure para PostgreSQL usando o portal do Azure. Se precisar criar várias instâncias desse serviço, você poderá gerar o script do processo usando a CLI do Azure.

Criar servidores flexíveis do Banco de Dados do Azure para PostgreSQL

No portal do Azure, digite servidores flexíveis do Banco de Dados do Azure para PostgreSQL na caixa de pesquisa e selecione servidores flexíveis do Banco de Dados do Azure para PostgreSQL.

Captura de tela mostrando o item servidores flexíveis do Banco de Dados do Azure para PostgreSQL no portal do Azure.

Selecione Criar no painel principal Servidor flexível, insira os detalhes do serviço. Os detalhes incluem:

  • Grupo de recursos. Grupo de recursos do servidor.

  • Nome do servidor. Deve ser um nome exclusivo contendo entre 3 e 63 caracteres, com apenas letras minúsculas, números e hifens.

  • Região. Região do 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 o tipo de preço e especificar os recursos de que precisa para o serviço. As opções foram abordadas na lição 1. Lembre-se de que, se escolher os tipos de preço Uso geral ou Otimizado para memória, você poderá escalar e reduzir verticalmente a quantidade 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 tiver sido criado.
  • Nome de usuário 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, administrador, raiz, convidado, públicoou qualquer nome que comece com pg_.

  • Senha. Deve ter entre 8 e 128 caracteres. Deve conter uma mistura de letras maiúsculas e minúsculas, números e caracteres não alfanuméricos.

Captura de tela mostrando um exemplo de configuração do servidor flexível do Banco de Dados do Azure para PostgreSQL no portal do Azure.

Clique em Examinar + Criar para implantar o serviço. A implantação levará vários minutos.

Depois que o serviço tiver sido implantado, escolha a opção Segurança de 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 escolher a opção Permitir acesso aos serviços do Azure.

Criar uma instância do Banco de Dados do Azure para PostgreSQL usando a CLI do Azure

Você pode criar uma instância do Banco de Dados do Azure para PostgreSQL usando o comando az postgres flexible-server create. A instrução abaixo mostra um exemplo que cria uma instância de servidor flexível. A maioria dos parâmetros é autoexplicativa, exceto o seguinte:

  • sku-name. Construído a partir de uma combinação do tipo de preço (B para Básico, GP para Uso geral e MO para Otimizado para memória), da geração de computação (Gen4 ou Gen5) e da quantidade de núcleos de CPU virtual. No exemplo a seguir, o servidor é criado usando o tipo de preço Uso Geral, com quatro núcleos de CPU da geração Gen5.
  • storage-size. É a quantidade de armazenamento em disco necessária, especificada em megabytes. O seguinte exemplo 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
    

Executar migração online

Você pode executar 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 atuais 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. Nesse ponto, 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 online é preparar o servidor de origem para permitir o log write-ahead. No servidor de origem, edite o arquivo de postgresql.config e configure os seguintes parâmetros de log write-ahead. Para alterar esses parâmetros, você deve reiniciar o servidor, portanto, só execute essa tarefa quando o sistema estiver 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

Por fim, 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, você pode usar o comando \dx plsql ou executar 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 serviço de Banco de Dados do Azure para PostgreSQL. Você usa uma ferramenta familiar, como o pgAdmin, para se conectar ao servidor ou 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 origem.

Importe o esquema para o banco de dados de destino. No computador 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 desta etapa porque os dados não serão necessariamente migrados em nenhuma sequência específica, possivelmente exibindo prompts de violações de integridade referenciais que causarão a falha do processo de migração. No entanto, você deve fazer um registro de todas as chaves estrangeiras, pois precisará recriá-las posteriormente. Execute a seguinte instrução SQL usando o utilitário psql para encontrar 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;

Desabilite os gatilhos no banco de dados de destino. Há dois motivos para fazer isso:

  • Ajuda a otimizar o processo de migração conforme os dados são copiados.
  • Os gatilhos são frequentemente usados para implementar formas complexas de integridade referencial e, pelos motivos descritos anteriormente, esse tipo de verificação de integridade pode falhar enquanto os dados estão sendo transferidos. Use a seguinte instrução SQL para encontrar todos os gatilhos em seu banco de dados e gerar um script que os desabilite:
    SELECT concat ('alter table ', event_object_table, ' disable trigger ', trigger_name)
    FROM information_schema.triggers;
    

Observação

Você pode encontrar o texto de um gatilho usando o comando \df+ no psql.

Criar uma instância do Serviço de Migração de Banco de Dados do Azure

No portal do Azure, você pode criar uma instância do Serviço de Migração de Banco de Dados do Azure.

Antes de criar a 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:

  1. Na barra de menu à esquerda do portal do Azure, escolha Todos os serviços.
  2. Na página Todos os serviços, selecione Assinaturas.
  3. Na página Assinaturas, selecione sua assinatura.
  4. Na página da sua assinatura, em Configurações, escolha Provedores de recursos.
  5. Na caixa Filtrar por nome, digite DataMigration e escolha Microsoft.DataMigration.
  6. Escolha Registrar e aguarde o Status ser alterado para Registrado. Talvez seja necessário escolher Atualizar para ver qual status mudar.
    Imagem mostrando a página Provedores de recursos. O usuário está registrando o provedor de recursos Microsoft.DataMigration

Quando o provedor de recursos for registrado, você poderá criar o serviço. Escolha o comando Criar um recurso, na barra de menus à esquerda, e procure o Serviço de Migração de Banco de Dados do Azure.

Imagem mostrando a página inicial ao criar o Serviço de Migração de Banco de Dados do Azure

Na página Criar serviço de migração, insira um nome para a instância do serviço, especifique a assinatura (que deve ser a mesma usada para o registro do provedor de recursos), o grupo de recursos e o local. Você também deve fornecer uma rede virtual, pois 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 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. O tipo de preço determina a quantidade de núcleos de processador virtual que estão disponíveis para o serviço. Se quiser executar uma migração online, escolha o tipo Premium. O tipo Standard só dá suporte à migração offline.

Imagem mostrando a configuração para o Serviço de Migração de Banco de Dados do Azure. O usuário escolheu o tipo de preço Premium

Aguarde a implantação do serviço antes de continuar. Essa operação levará alguns minutos.

Criar um projeto de migração usando o Serviço de Migração de Banco de Dados

Agora você pode usar a instância do Serviço de Migração de Banco de Dados para realizar uma migração online. Para fazer isso, crie um projeto de Migração de Banco de Dados. Vá para a página de sua instância do serviço de migração e selecione Novo projeto de migração.

Imagem mostrando o Serviço de Migração de Banco de Dados do Azure recém-criado.

Na página Novo projeto de migração, defina o tipo de servidor de origem como PostgreSQL, o tipo de servidor de destino como Banco de Dados do Azure para PostgreSQL e escolha 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.

Imagem mostrando as propriedades e instruções do projeto de migração.

Verifique se concluiu essas etapas e escolha Criar e executar atividade.

Criar e executar uma atividade de migração

O novo projeto de migração inicia um assistente que orienta você durante o processo. Inclua estes detalhes:

  • Na página Adicionar detalhes da origem, adicione o endereço do servidor de origem, o banco de dados de origem e uma conta que possa 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 de destino, especifique o endereço do serviço do 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 os bancos de dados de destino, escolha os bancos de dados de origem e de destino. Você pode migrar um único banco de dados ou vários.
  • Na página Configurações de migração, especifique as configurações adicionais que deseja configurar, como a quantidade máxima de tabelas a ser carregadas em paralelo.
  • Na página Resumo da migração, insira um nome para a atividade e selecione Executar migração.
    Imagem mostrando a página resumo de migração.

A página status da atividade é exibida com o progresso da migração e os erros que ocorreram. Se a migração falhar, corrija os problemas e tente a atividade novamente. Se estiver fazendo uma migração online, o status será alterado para Pronto para substituição depois que os dados existentes forem transferidos. No entanto, a atividade continua em execução, para transferir quaisquer alterações adicionais que apareçam enquanto os aplicativos ainda estão usando ativamente o banco de dados original.

Imagem mostrando a página de status da atividade de migração. A migração transferiu todos os dados atuais e está pronta para fazer a substituição para o novo banco de dados.

Restabelecer chaves estrangeiras e gatilhos

Nesse momento, você transferiu os dados, que os aplicativos podem começar a usar. Você deve recriar as chaves estrangeiras que removeu antes de migrar os dados e restabelecer os gatilhos. Se alguns aplicativos ainda estiverem conectados ao banco de dados original, o log write-ahead garantirá que o banco de dados de destino no Azure seja mantido atualizado. O log write-ahead não será afetado negativamente por chaves estrangeiras e gatilhos.

Substituir para o novo banco de dados

Quando todos os aplicativos forem alternados para o novo banco de dados, conclua o processo de migração e passar para o novo banco de dados. Na página Status da atividade, escolha o nome do banco de dados que está sendo migrado para ver um resumo do trabalho realizado.

Imagem mostrando as estatísticas da atividade de migração.

Selecione Iniciar substituição. Você verá uma página solicitando que você confirme se a operação foi concluída. Nesse momento, as entradas restantes do log write-ahead do banco de dados de origem serão descarregadas e as atualizações serão interrompidas. Outras alterações no banco de dados de origem não serão propagadas.

Imagem da página Concluir a substituição.

Executar migração offline

Uma migração offline tira um "instantâneo" do banco de dados de origem em um ponto específico no tempo e copia esses dados para o banco de dado de destino. Nenhuma alteração feita nos dados de origem após o instantâneo ter sido realizado será refletida no banco de dado de destino.

Você tem pelo menos duas opções para 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 dado de destino usando o utilitário psql. Essa técnica permite que você mude, reformate e limpe o esquema e os dados, se necessário, antes de transferi-los para o banco de dado de destino.
  • Despeje os dados do banco de dado 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 a exportação e a importação, mas os dados são despejados em um formato que não pode ser facilmente alterado. Use essa abordagem se você não precisar ajustar o esquema ou os dados.

Observação

No momento, 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 exportar e importar

Execute as etapas a seguir para migrar um banco de dados usando a abordagem de exportação e importação.

  1. Exporte o esquema usando o comando pg_dump de um prompt do bash:

    pg_dump -o -h [source database server] -U [user name] -d [database] -s > db_schema.sql
    
  2. 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 momento, db_schema.sql e db_data.sql são scripts SQL que você muda usando um editor de texto.

  3. Crie o banco de dados de destino no Banco de Dados do Azure para PostgreSQL. Isso é feito com a CLI do Azure:

    az postgres db create \
        --name [database name] \
        --server-name [server name] \
        --resource-group [azure resource group]
    
  4. Importe o esquema para o banco de dado 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
    
  5. Importe os dados para o banco de dado 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 para migrar um banco de dados usando backup e restauração.

  1. Fazer backup do banco de dados: em um prompt do bash, execute o comando a seguir. Especifique o nome de um usuário que tem 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
    
  2. 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] \
    
  3. Restaure o backup no novo banco de dados com o comando pg_restore de um prompt do bash. Especifique o nome de um usuário com direitos administrativos em seu serviço do Banco de Dados do Azure para PostgreSQL:

    pg_restore -d [target database name] -h [server name in Azure Database for PostgreSQL] -Fc -U [user name] database_backup.bak