Migrar o Amazon RDS for MySQL para o Banco de Dados do Azure para MySQL usando a replicação de dados
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 Banco de Dados do Azure para o Servidor Flexível 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 Replicar dados no Banco de Dados do Azure para MySQL - Servidor flexível 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 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 Banco de Dados do Azure para Servidor Flexível 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:
- Crie o servidor com HA redundante de zona habilitada.
- Desative o HA.
- Siga o artigo para configurar a replicação de dados.
- Após a substituição, remova a configuração de replicação de dados.
- 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 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 arquivos de despejo para que as
CREATE TABLE
instruções não incluam definições de chave 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 de banco de dados de origem para permitir o endereço IP do Banco de Dados do Azure de destino para o Servidor Flexível MySQL.
Importante
Se a instância de origem do Amazon RDS for MySQL tiver GTID_mode definida como ON, a instância de destino do Azure Database for 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 Banco de Dados do Azure para o Servidor Flexível MySQL, que é o destino da Replicação de Dados:
Defina o valor do
max_allowed_packet
parâmetro para o máximo de 1073741824, que é 1 GB. Esse valor evita quaisquer problemas de estouro relacionados a linhas longas.Defina os
slow_query_log
parâmetros ,general_log
,audit_log_enabled
equery_store_capture_mode
como OFF durante a migração para ajudar a eliminar qualquer sobrecarga relacionada ao log de consultas.Aumente o tamanho de computação do Banco de Dados do Azure de destino para a instância do Servidor Flexível MySQL para 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.
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:
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.
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 a Replicação de Dados, o Banco de Dados do Azure para Servidor Flexível MySQL não gerencia o processo de replicação.
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: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) |
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.
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:
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.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;
.Salve esses valores para iniciar a replicação da sua instância do Servidor Flexível do Banco de Dados do Azure para MySQL.
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:
Crie uma réplica de leitura do Amazon MySQL com a mesma configuração do servidor de origem. Em seguida, crie o despejo lá.
Permita que a réplica de leitura do Amazon RDS for MySQL acompanhe o servidor de origem do Amazon RDS for MySQL.
Quando o atraso da réplica atingir 0 na réplica de leitura, interrompa a replicação chamando o procedimento
mysql.rds_stop_replication
armazenado .call mysql.rds_stop_replication;
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 .Salve esses valores para iniciar a replicação da sua instância do Servidor Flexível do Banco de Dados do Azure para MySQL.
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.
Vincular servidores de origem e de réplica para iniciar a replicação de dados
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
Nota
Se, em vez disso, você estiver usando myloader, consulte Migrar bancos de dados grandes para o Banco de Dados do Azure para Servidor Flexível MySQL usando mydumper/myloader.
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 Procedimentos armazenados de replicação de dados. Você pode executar esses procedimentos armazenados no shell do MySQL ou no MySQL Workbench.
Para vincular o servidor de origem do Amazon RDS for MySQL e o servidor de destino do Azure Database for MySQL Flexible Server, entre na instância de destino do Azure Database for 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>');
Para iniciar a replicação entre o servidor Amazon RDS for MySQL de origem e a instância de destino do Azure Database for MySQL Flexible Server, execute o seguinte comando:
CALL mysql.az_replication_start;
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 e
Slave_SQL_Running
for Sim, aSlave_IO_Running
replicação foi iniciada e está em um estado de execução.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:
- 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.
- Pare as gravações no servidor de origem do Amazon RDS for MySQL.
- Verifique se a instância de destino do Banco de Dados do Azure para Servidor Flexível MySQL alcançou o servidor de origem e se o
Seconds_Behind_Master
valor é 0 deshow slave status
. - 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. - Chamada
mysql.az_replication_remove_master
para remover a configuração de replicação de dados. - 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.