Migrar o Amazon RDS for MySQL para o Banco de Dados do Azure para MySQL usando a replicação de dados

Nota

Este artigo contém referências ao termo slave, um termo que a Microsoft já não utiliza. Quando o termo for removido do software, iremos removê-lo deste artigo.

Você pode usar métodos como despejo e restauração do MySQL, MySQL Workbench Export and Import ou Serviço de Migração de Banco de Dados do Azure para migrar seus bancos de dados MySQL para o Banco de Dados do Azure para o Servidor Flexível MySQL. Pode migrar as suas cargas de trabalho com um tempo de inatividade mínimo ao utilizar uma combinação de ferramentas open-source, como o mysqldump ou o mydumper, e o myloader com Data-in Replication.

A replicação de dados é uma técnica que replica alterações de dados do servidor de origem para o servidor de destino com base no método de posição do arquivo de log binário. Nesse cenário, a instância do MySQL que opera como a origem (na qual as alterações do banco de dados se originam) grava atualizações e alterações como eventos no log binário. As informações no log binário são armazenadas em diferentes formatos de log de acordo com as alterações do banco de dados que estão sendo registradas. As réplicas são configuradas para ler o log binário da origem e executar os eventos no log binário no banco de dados local da réplica.

Configure Replicar dados para o Base de Dados do Azure para MySQL - Flexible Server para sincronizar dados de um servidor MySQL de origem para outro de destino. Você pode fazer uma transferência seletiva de seus aplicativos do banco de dados primário (ou de origem) para a réplica (ou banco de dados de destino).

Veja Migrar bases de dados da Amazon Web Services para Azure, que inclui cenários exemplos de migração que possam alinhar-se com o seu caso de uso.

Neste tutorial, você aprenderá a configurar a replicação de dados entre um servidor de origem que executa o Amazon Relational Database Service (RDS) para MySQL e um servidor de destino que executa o Banco de Dados do Azure para o Servidor Flexível MySQL.

Considerações de desempenho

Antes de começar este tutorial, considere as implicações de desempenho do local e a capacidade do computador cliente que você usará para executar a operação.

Localização do cliente

Execute operações de despejo ou restauração de um computador cliente iniciado no mesmo local do servidor de banco de dados:

  • Para instâncias do Banco de Dados do Azure para Servidor Flexível MySQL, a máquina cliente deve estar na mesma rede virtual e zona de disponibilidade que o servidor de banco de dados de destino.
  • Para instâncias de banco de dados de origem do Amazon RDS, a instância do cliente deve existir na mesma zona de disponibilidade e na Amazon Virtual Private Cloud que o servidor de banco de dados de origem. No caso anterior, você pode mover arquivos de despejo entre máquinas cliente usando protocolos de transferência de arquivos como FTP ou SFTP ou carregá-los no Armazenamento de Blobs do Azure. Para reduzir o tempo total de migração, compacte os arquivos antes de transferi-los.

Capacidade do cliente

Não importa onde o computador cliente esteja localizado, ele requer computação, E/S e capacidade de rede adequadas para executar as operações solicitadas. As recomendações gerais são as seguintes:

  • Se o despejo ou restauração envolver processamento de dados em tempo real, por exemplo, compactação ou descompressão, escolha uma classe de instância com pelo menos um núcleo de CPU por dump ou thread de restauração.
  • Verifique se há largura de banda de rede suficiente disponível para a instância do cliente. Use tipos de instância que ofereçam suporte ao recurso de rede acelerada. Para obter mais informações, consulte a seção "Rede acelerada" no Guia de Rede de Máquina Virtual do Azure.
  • Certifique-se de que a camada de armazenamento da máquina cliente forneça a capacidade de leitura/gravação esperada. Recomendamos que você use uma máquina virtual do Azure com armazenamento SSD Premium.

Pré-requisitos

Para concluir este tutorial, precisa de:

  • Instale o mysqlclient em seu computador cliente para criar um despejo e execute uma operação de restauração em sua instância de destino do Banco de Dados do Azure para o Servidor Flexível MySQL.

  • Para bancos de dados maiores, instale mydumper e myloader para despejo paralelo e restauração de bancos de dados.

    Nota

    Mydumper só pode ser executado em distribuições Linux. Para obter mais informações, consulte Como instalar o mydumper.

  • Crie uma instância do Banco de Dados do Azure para o Servidor Flexível MySQL que execute a versão 5.7 ou 8.0.

    Importante

    Se o seu destino for o Base de Dados do Azure para MySQL – Flexible Server com alta disponibilidade (HA) com redundância entre zonas, tenha em atenção que a replicação de entrada de dados não é suportada para esta configuração. Como solução alternativa, durante a criação do servidor configure HA com redundância de zona:

    1. Crie o servidor com HA redundante de zona habilitada.
    2. Desative HA.
    3. Siga as instruções do artigo para configurar a Data-in Replication.
    4. Após a substituição, remova a configuração de replicação de dados.
    5. Ative o HA.

Certifique-se de que vários parâmetros e funcionalidades estejam devidamente configurados e preparados, conforme descrito:

  • Por razões de compatibilidade, tenha os servidores de banco de dados de origem e de destino na mesma versão do MySQL.
  • Tenha uma chave primária em cada tabela. A falta de chaves primárias nas tabelas pode atrasar o processo de replicação.
  • Verifique se o conjunto de caracteres do banco de dados de origem e de destino são os mesmos.
  • Defina o wait_timeout parâmetro para um tempo razoável. O tempo depende da quantidade de dados ou carga de trabalho que você deseja importar ou migrar.
  • Verifique se todas as suas tabelas usam InnoDB. O Banco de Dados do Azure para Servidor Flexível MySQL dá suporte apenas ao mecanismo de armazenamento InnoDB.
  • Para tabelas com muitos índices secundários ou tabelas grandes, os efeitos de sobrecarga de desempenho são visíveis durante a restauração. Modifique os ficheiros de dump para que as instruções CREATE TABLE não incluam definições de chaves secundárias. Depois de importar os dados, recrie índices secundários para evitar a penalidade de desempenho durante o processo de restauração.

Finalmente, para se preparar para a replicação de dados:

  • Verifique se a instância de destino do Banco de Dados do Azure para Servidor Flexível MySQL pode se conectar ao servidor Amazon RDS for MySQL de origem pela porta 3306.
  • Certifique-se de que o servidor de origem do Amazon RDS for MySQL permita tráfego de entrada e de saída na porta 3306.
  • Certifique-se de fornecer conectividade site a site para seu servidor de origem usando o Azure ExpressRoute ou o Gateway de VPN do Azure. Para obter mais informações sobre como criar uma rede virtual, consulte a documentação da Rede Virtual do Azure. Consulte também os artigos de início rápido com detalhes passo a passo.
  • Configure os grupos de segurança de rede do servidor da base de dados de origem para permitir o endereço IP do Base de Dados do Azure para MySQL Flexible Server de destino.

Importante

Se a instância de origem do Amazon RDS for MySQL tiver GTID_mode definida como ON, a instância de destino do Base de Dados do Azure para MySQL Flexible Server também deverá ter GTID_mode definida como ON.

Configurar a instância de destino do Banco de Dados do Azure para MySQL

Para configurar a instância de destino do Base de Dados do Azure para MySQL – Flexible Server, que é o destino da Replicação de entrada de dados:

  1. Defina o valor do max_allowed_packet parâmetro para o máximo de 1073741824, que é 1 GB. Este valor evita quaisquer problemas de transbordo relacionados com linhas longas.

  2. Defina os parâmetros slow_query_log, general_log, audit_log_enabled e query_store_capture_mode para OFF durante a migração para ajudar a eliminar qualquer sobrecarga relacionada com o registo de consultas.

  3. Aumente a capacidade de computação da instância de destino do Base de Dados do Azure para MySQL – Flexible Server até ao máximo de 64 vCores. Esse tamanho fornece mais recursos de computação ao restaurar o despejo de banco de dados do servidor de origem.

    Você sempre pode reduzir a computação para atender às demandas do aplicativo após a conclusão da migração.

  4. Aumente o tamanho do armazenamento para obter mais IOPS durante a migração ou aumente o máximo de IOPS para a migração.

    Nota

    As IOPS máximas disponíveis são determinadas pelo tamanho do cálculo. Para obter mais informações, consulte a seção IOPS em Opções de computação e armazenamento no Banco de Dados do Azure para Servidor Flexível MySQL.

Configurar o Amazon RDS de origem para o servidor MySQL

Para preparar e configurar o servidor MySQL hospedado no Amazon RDS, que é a fonte da replicação Data-in:

  1. Confirme se o log binário está habilitado no servidor de origem do Amazon RDS for MySQL. Verifique se os backups automatizados estão habilitados ou verifique se existe uma réplica de leitura para o servidor de origem do Amazon RDS for MySQL.

  2. Certifique-se de que os arquivos de log binários no servidor de origem sejam retidos até que as alterações sejam aplicadas na instância de destino do Banco de Dados do Azure para o Servidor Flexível MySQL.

    Com o Data-in Replication, o Servidor Flexível do Base de Dados do Azure para MySQL não gere o processo de replicação.

  3. Para verificar a retenção dos registos binários no servidor Amazon RDS de origem, para determinar durante quantas horas os registos binários são retidos, chame o procedimento armazenado mysql.rds_show_configuration:

    call mysql.rds_show_configuration;
    +------------------------+-------+-----------------------------------------------------------------------------------------------------------+
    | name | value | description |
    | +------------------------+-------+-----------------------------------------------------------------------------------------------------------+ |
    | binlog retention hours | 24 | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
    | source delay | 0 | source delay specifies replication delay in seconds between current instance and its master. |
    | target delay | 0 | target delay specifies replication delay in seconds between current instance and its future read-replica. |
    | +------------------------+------- +-----------------------------------------------------------------------------------------------------------+ |
    | 3 rows in set (0.00 sec) |
    
  4. Para configurar o período de retenção do log binário, execute o rds_set_configuration procedimento armazenado para garantir que os logs binários sejam mantidos no servidor de origem pelo tempo desejado. Por exemplo:

    Call mysql.rds_set_configuration('binlog retention hours', 96);
    

    Se você estiver criando um dump e restaurando, o comando anterior o ajudará a acompanhar as alterações delta rapidamente.

    Nota

    Garanta amplo espaço em disco para armazenar os logs binários no servidor de origem com base no período de retenção definido.

Existem duas formas de criar um dump de dados do servidor de origem Amazon RDS for MySQL. Uma das abordagens consiste em extrair uma cópia integral dos dados diretamente do servidor de origem. A outra abordagem consiste em capturar um dump de uma réplica de leitura do Amazon RDS for MySQL.

  • Para capturar um despejo de dados diretamente do servidor de origem:

    1. Certifique-se de parar as gravações do aplicativo por alguns minutos para obter um despejo de dados transacionalmente consistente.

      Também pode definir temporariamente o parâmetro read_only para o valor 1, para que as operações de escrita não sejam processadas quando estiver a capturar uma descarga de dados.

    2. Depois de parar as gravações no servidor de origem, colete o nome do arquivo de log binário e o deslocamento executando o comando Mysql> Show master status;.

    3. Guarde estes valores para iniciar a replicação a partir da sua instância do Base de Dados do Azure para MySQL Flexible Server.

    4. Para criar um despejo dos dados, execute mysqldump executando o seguinte comando:

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      
  • Se parar as gravações no servidor de origem não for uma opção ou se o desempenho de despejo de dados não for aceitável no servidor de origem, capture um despejo em um servidor de réplica:

    1. Crie uma réplica de leitura do Amazon MySQL com a mesma configuração do servidor de origem. Em seguida, crie o despejo lá.

    2. Permita que a réplica de leitura do Amazon RDS for MySQL acompanhe o servidor de origem do Amazon RDS for MySQL.

    3. Quando o atraso da réplica atingir 0 na réplica de leitura, interrompa a replicação chamando o procedimento armazenado mysql.rds_stop_replication.

      call mysql.rds_stop_replication;
      
    4. Com a replicação interrompida, conecte-se à réplica. Em seguida, execute o SHOW SLAVE STATUS comando para recuperar o nome do arquivo de log binário atual do campo Relay_Master_Log_File e a posição do arquivo de log do campo Exec_Master_Log_Pos .

    5. Guarde estes valores para iniciar a replicação a partir da sua instância do Servidor Flexível do Banco de Dados do Azure para MySQL.

    6. Para criar um dump dos dados da réplica de leitura do Amazon RDS for MySQL, execute mysqldump com o seguinte comando:

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      

    Nota

    Também pode utilizar o mydumper para criar um dump em paralelo dos seus dados a partir da sua base de dados de origem Amazon RDS for MySQL. Para obter mais informações, consulte Migrar bancos de dados grandes para o Banco de Dados do Azure para Servidor Flexível MySQL usando mydumper/myloader.

  1. Para restaurar o banco de dados usando a restauração nativa do mysql, execute o seguinte comando:

    $ mysql -h <target_server> -u <targetuser> -p < dumpname.sql
    
  2. Faça login no servidor de origem do Amazon RDS for MySQL e configure um usuário de replicação. Em seguida, conceda os privilégios necessários a esse usuário.

    • Se você estiver usando SSL, execute os seguintes comandos:

      CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%' REQUIRE SSL;
      SHOW GRANTS FOR syncuser@'%';
      
    • Se você não estiver usando SSL, execute os seguintes comandos:

      CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%';
      SHOW GRANTS FOR syncuser@'%';
      

    Os procedimentos armazenados executam todas as funções de replicação de dados. Para obter informações sobre todos os procedimentos, consulte os procedimentos armazenados de Data-in Replication. Você pode executar esses procedimentos armazenados no shell do MySQL ou no MySQL Workbench.

  3. Para vincular o servidor de origem do Amazon RDS for MySQL e o servidor de destino do Base de Dados do Azure para MySQL Flexible Server, entre na instância de destino do Base de Dados do Azure para MySQL Flexible Server. Defina o servidor Amazon RDS for MySQL como o servidor de origem executando o seguinte comando:

    CALL mysql.az_replication_change_master('source_server','replication_user_name','replication_user_password',3306,'<master_bin_log_file>',master_bin_log_position,'<master_ssl_ca>');
    
  4. Para iniciar a replicação entre o servidor Amazon RDS for MySQL de origem e a instância de destino do Base de Dados do Azure para MySQL Flexible Server, execute o seguinte comando:

    CALL mysql.az_replication_start;
    
  5. Para verificar o status da replicação no servidor de réplica, execute o seguinte comando:

    show slave status\G
    

    Se o estado dos parâmetros Slave_IO_Running e Slave_SQL_Running for Sim, a replicação foi iniciada e está em execução.

  6. Verifique o valor do parâmetro Seconds_Behind_Master para determinar quão atrasado está o servidor de destino.

    Se o valor for 0, o destino processou todas as atualizações do servidor de origem. Se o valor for diferente de 0, o servidor de destino ainda está processando atualizações.

Garanta uma transição bem-sucedida

Para garantir uma transição bem-sucedida:

  1. Configure os logons apropriados e as permissões no nível de banco de dados no Banco de Dados do Azure de destino para a instância do Servidor Flexível MySQL.
  2. Interrompa as operações de escrita no servidor de origem Amazon RDS for MySQL.
  3. Certifique-se de que a instância de destino do Base de Dados do Azure para MySQL Flexible Server está sincronizada com o servidor de origem e de que o valor de Seconds_Behind_Master é 0 em show slave status.
  4. Chame o procedimento mysql.az_replication_stop armazenado para interromper a replicação porque todas as alterações foram replicadas para a instância de destino do Banco de Dados do Azure para o Servidor Flexível MySQL.
  5. Chame mysql.az_replication_remove_master para remover a configuração do Data-in Replication.
  6. Redirecionar clientes e aplicativos cliente para a instância de destino do Banco de Dados do Azure para Servidor Flexível MySQL.

Neste ponto, a migração está concluída. Seus aplicativos estão conectados ao servidor que executa o Banco de Dados do Azure para o Servidor Flexível MySQL.