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

APLICA-SE A: Banco de Dados do Azure para MySQL - Servidor Único Banco de Dados do Azure para MySQL - Servidor Flexível

Importante

O servidor único do Banco de Dados do Azure para MySQL está no caminho de desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para o servidor flexível MySQL. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para servidor flexível MySQL, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único MySQL?

Nota

Este artigo poderá conter referências ao termo slave (secundário), 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 servidor flexível do Banco de Dados do Azure para MySQL. Você pode migrar suas cargas de trabalho com o mínimo de tempo de inatividade usando uma combinação de ferramentas de código aberto, como mysqldump ou mydumper e myloader com replicação Data-in.

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 a replicação Data-in para sincronizar dados de um servidor MySQL de origem para um servidor MySQL 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).

Neste tutorial, você aprenderá a configurar a replicação Data-in 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 de servidor flexíveis do Banco de Dados do Azure para 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 descompactaçã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 dump e execute uma operação de restauração em seu banco de dados do Azure de destino para instância de 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 servidor flexível do Banco de Dados do Azure para MySQL com alta disponibilidade (HA) com redundância de zona, observe que a Replicação de Dados não é suportada para essa 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 o HA.
    3. Siga o artigo para configurar a replicação de dados.
    4. Após a substituição, remova a configuração de replicação de dados.
    5. Habilite o HA.

Certifique-se de que vários parâmetros e recursos estejam configurados e configurados corretamente, 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 servidor flexível do Banco de Dados do Azure para 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 arquivos de despejo para que as CREATE TABLE instruções não incluam definições de chave secundária. 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 flexível do servidor de destino do Banco de Dados do Azure para MySQL pode se conectar ao servidor de origem do Amazon RDS for MySQL 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 de banco de dados de origem para permitir o endereço IP flexível do Banco de Dados do Azure para MySQL 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 servidor flexível do Banco de Dados do Azure para MySQL 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 Banco de Dados do Azure para o servidor flexível MySQL, que é o destino da Replicação de Dados:

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

  2. Defina os slow_query_logparâmetros , , general_logaudit_log_enablede como query_store_capture_mode OFF durante a migração para ajudar a eliminar qualquer sobrecarga relacionada ao log de consultas.

  3. Aumente o tamanho de computação da instância flexível do servidor flexível do Banco de Dados do Azure para MySQL de destino até o 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 mantidos 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 a Replicação de Dados, o servidor flexível do Banco de Dados do Azure para MySQL não gerencia o processo de replicação.

  3. Para verificar a retenção de logs binários no servidor de origem do Amazon RDS para determinar o número de horas em que os logs binários são retidos, chame o mysql.rds_show_configuration procedimento armazenado:

    mysql> 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:

    Mysql> 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.

Há duas maneiras de capturar um despejo de dados do servidor Amazon RDS for MySQL de origem. Uma abordagem envolve a captura de um despejo de dados diretamente do servidor de origem. A outra abordagem envolve a captura de 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.

      Você também pode definir temporariamente o read_only parâmetro para um valor de 1 para que as gravações não sejam processadas quando você estiver capturando um despejo 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. Salve esses valores para iniciar a replicação a partir do seu Banco de Dados do Azure para instância de servidor flexível MySQL.

    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 mysql.rds_stop_replicationarmazenado .

      Mysql> call mysql.rds_stop_replication;
      
    4. Com a replicação interrompida, conecte-se à réplica. Em seguida, execute o comando para recuperar o SHOW SLAVE STATUS 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. Salve esses valores para iniciar a replicação a partir do seu Banco de Dados do Azure para instância de servidor flexível MySQL.

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

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

    Nota

    Você também pode usar mydumper para capturar um dump paralelizado de seus dados do banco de dados Amazon RDS for MySQL de origem. 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:

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

      Mysql> CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      Mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%';
      Mysql> 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 Procedimentos armazenados de replicação de dados. Você pode executar esses procedimentos armazenados no shell do MySQL ou no MySQL Workbench.

  3. Para vincular o servidor de origem do Amazon RDS para MySQL e o servidor de destino flexível do Banco de Dados do Azure para MySQL, entre na instância flexível do servidor de destino do Banco de Dados do Azure para MySQL. 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 de origem do Amazon RDS for MySQL e a instância de servidor flexível do Banco de Dados do Azure para MySQL de destino, execute o seguinte comando:

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

    Mysql> show slave status\G
    

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

  6. Verifique o valor do parâmetro para determinar o atraso do servidor de Seconds_Behind_Master 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 flexível do servidor MySQL.
  2. Pare as gravações no servidor de origem do Amazon RDS for MySQL.
  3. Verifique se a instância flexível do servidor flexível do Banco de Dados do Azure para MySQL de destino alcançou o servidor de origem e se o Seconds_Behind_Master valor é 0 de 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 flexível do servidor flexível do Banco de Dados do Azure para MySQL de destino.
  5. Chamada mysql.az_replication_remove_master para remover a configuração de replicação de dados.
  6. Redirecione clientes e aplicações cliente para a instância flexível do servidor flexível da Base de Dados do Azure para MySQL de destino.

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.

Próximos passos

  • Para obter mais informações sobre como migrar bancos de dados para o Banco de Dados do Azure para o servidor flexível MySQL, consulte o Guia de Migração de Banco de Dados.
  • Veja o vídeo Migre facilmente aplicações MySQL/PostgreSQL para o serviço gerido do Azure. Ele contém uma demonstração que mostra como migrar aplicativos MySQL para o Banco de Dados do Azure para o servidor flexível MySQL.