Exercício: migrar banco de dados MySQL local para o Banco de Dados do Azure para MySQL

Concluído

Neste exercício, você migrará um banco de dados MySQL para o Azure. Você migrará um banco de dados MySQL existente em execução em uma máquina virtual para o Banco de Dados do Azure para MySQL.

Você trabalha como desenvolvedor de banco de dados para a organização AdventureWorks. Há mais de uma década, a AdventureWorks vende bicicletas e peças diretamente para distribuidores e consumidores finais. Os sistemas dela armazenam informações em um banco de dados que, no momento, é executado usando o MySQL em uma VM do Azure. Como parte de um exercício de racionalização de hardware, a AdventureWorks deseja mover o banco de dados para um banco de dados gerenciado pelo Azure. Você foi convidado a executar essa migração.

Importante

O Serviço de Migração de Dados do Azure não tem suporte no ambiente de área restrita gratuito do Azure. Você pode executar estas etapas em sua própria assinatura pessoal ou apenas acompanhar para entender como migrar seu banco de dados.

Configurar o ambiente

Execute esses comandos da CLI do Azure no Cloud Shell para criar uma máquina virtual, executando o MySQL, com uma cópia do banco de dados da AdventureWorks. Os últimos comandos imprimirão o endereço IP da nova máquina virtual.

az account list-locations -o table

az group create \
    --name migrate-mysql \
    --location <CHOOSE A LOCATION FROM ABOVE NEAR YOU>

az vm create \
    --resource-group migrate-mysql \
    --name mysqlvm \
    --admin-username azureuser \
    --admin-password Pa55w.rdDemo \
    --image Ubuntu2204 \
    --public-ip-address-allocation static \
    --public-ip-sku Standard \
    --size Standard_B2ms 

az vm open-port \
    --resource-group migrate-mysql \
    --name mysqlvm \
    --priority 200 \
    --port '22'

az vm open-port \
    --resource-group migrate-mysql \
    --name mysqlvm \
    --priority 300 \
    --port '3306'

az vm run-command invoke \
    --resource-group migrate-mysql \
    --name mysqlvm \
    --command-id RunShellScript \
    --scripts "
    # MySQL installation
    sudo apt-get update && sudo apt-get upgrade -y
    sudo DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server

    # Disable Ubuntu Firewall bind mysql
    sudo ufw disable
    sudo bash << EOF
        echo "bind-address=0.0.0.0" >> /etc/mysql/mysql.conf.d/mysqld.cnf
        echo "log-bin" >> /etc/mysql/mysql.conf.d/mysqld.cnf
        echo "server-id=99" >> /etc/mysql/mysql.conf.d/mysqld.cnf
    EOF
    sudo service mysql stop
    sudo service mysql start 

    # Clone exercise code
    sudo git clone https://github.com/MicrosoftLearning/DP-070-Migrate-Open-Source-Workloads-to-Azure.git /home/azureuser/workshop
 
    # Add a password to mysql root user
    sudo mysqladmin -u root password Pa55w.rd
    # Use mysql to create users and an empty adventureworks 
    sudo mysql -u root -pPa55w.rd -e \"CREATE USER azureuser IDENTIFIED BY 'Pa55w.rd';GRANT ALL PRIVILEGES ON *.* TO azureuser;CREATE DATABASE adventureworks;\"
    # Use mysql to import the adventureworks database
    sudo mysql --user=azureuser --password=Pa55w.rd --database=adventureworks < /home/azureuser/workshop/migration_samples/setup/mysql/adventureworks/adventureworks.sql
    sudo service mysql restart"
    
MYSQLIP="$(az vm list-ip-addresses \
    --resource-group migrate-mysql \
    --name mysqlvm \
    --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
    --output tsv)"

echo $MYSQLIP

A execução desses comandos levará cerca de 5 minutos para ser concluída. Você não precisa esperar, pode continuar com as etapas abaixo.

Criar o banco de dados do Azure para o banco de dados e o servidor MySQL

A primeira fase do projeto precisa criar um banco de dados do Azure para MySQL para hospedar o novo banco de dados de suas empresas.

  1. Usando um navegador da Web, abra uma nova guia e navegue até o portal do Azure.

  2. Selecione + Criar um recurso.

  3. Na caixa Pesquisar no Marketplace, digite Banco de Dados do Azure para MySQL e pressione Enter.

  4. Na página Banco de Dados do Azure para MySQL, selecione Criar.

  5. Na página Selecionar opção de implantação do Banco de Dados do Azure para MySQL, em Servidor flexível, selecione Criar.

  6. Na página Criar servidor MySQL, insira os detalhes seguintes e selecione Examinar + criar:

    Propriedade Valor
    Resource group migrate-mysql
    Nome do servidor adventureworksnnn, em que nnn é um sufixo da sua escolha para que o nome do servidor seja exclusivo
    Fonte de dados Nenhuma
    Localização Selecione sua localização mais próxima
    Versão 5.7
    Computação + armazenamento Selecione Configurar servidor, selecione o tipo de preço Básico e OK
    Nome de usuário do administrador awadmin
    Senha Pa55w.rdDemo
    Confirmar senha Pa55w.rdDemo
  7. Na página Examinar + criar escolha Criar. Aguarde a criação do serviço antes de continuar.

  8. Após a criação do serviço, escolha Ir para o recurso.

  9. Selecione Segurança da conexão.

  10. Na página Segurança da conexão, defina Permitir acesso aos serviços do Azure como Sim.

  11. Na lista de regras de firewall, adicione uma regra chamada VM e defina o ENDEREÇO IP INICIAL e o ENDEREÇO IP FINAL para o endereço IP da máquina virtual que está executando o servidor MySQL. Trata-se do endereço IP listado como a última linha no Cloud Shell.

  12. Selecione Adicionar endereço IP do cliente atual para habilitar também o computador cliente para acessar o banco de dados.

  13. Salve e aguarde a atualização das regras de firewall.

  14. No prompt do Cloud Shell, execute o comando a seguir para criar um banco de dados no serviço de Banco de Dados do Azure para MySQL. Substitua [nnn] pelo sufixo usado quando você criou o serviço Banco de Dados do Azure para MySQL. Substitua [grupo de recursos] pelo nome do grupo de recursos especificado para o serviço:

    az MySQL db create \
    --name azureadventureworks \
    --server-name adventureworks[nnn] \
    --resource-group migrate-mysql
    

    Se o banco de dados for criado com êxito, você deverá ver uma mensagem semelhante à seguinte:

    {
          "charset": "latin1",
          "collation": "latin1_swedish_ci",
          "id": "/subscriptions/nnnnnnnnnnnnnnnnnnnnnnnnnnnnn/resourceGroups/nnnnnn/providers/Microsoft.DBforMySQL/servers/adventureworksnnnn/databases/azureadventureworks",
          "name": "azureadventureworks",
          "resourceGroup": migrate-mysql,
          "type": "Microsoft.DBforMySQL/servers/databases"
    }
    

Exportar o esquema a ser usado no banco de dados de destino

Agora você se conectará à VM MySQL existente usando o Cloud Shell para exportar o esquema de banco de dados.

  1. Execute este comando da CLI do Azure para ver o endereço IP da VM existente.

    MYSQLIP="$(az vm list-ip-addresses \
        --resource-group migrate-mysql \
        --name mysqlvm \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $MYSQLIP
    
  2. Conecte-se ao servidor de banco de dados antigo usando SSH. Na senha, insira Pa55w.rdDemo.

    ssh azureuser@$MYSQLIP
    
  3. Exporte o esquema do banco de dados de origem usando o utilitário mysqldump:

    mysqldump -u azureuser -pPa55w.rd adventureworks --no-data > adventureworks_mysql_schema.sql
    

Importar o esquema para o banco de dados de destino

  1. No Cloud Shell, execute o comando a seguir para se conectar ao servidor azureadventureworks[nnn]. Substitua as duas instâncias de [nnn] pelo sufixo do seu serviço. Observe que o nome de usuário tem o sufixo @adventureworks[nnn]. No prompt de senha, digite Pa55w.rdDemo.

    mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo
    
  2. Execute os comandos a seguir para criar um usuário chamado azureuser e defina a senha desse usuário como Pa55w.rd. A segunda instrução fornece ao usuário azureuser os privilégios necessários para criar objetos no banco de dados azureadventureworks.

    GRANT SELECT ON *.* TO 'azureuser'@'localhost' IDENTIFIED BY 'Pa55w.rd';
    GRANT CREATE ON *.* TO 'azureuser'@'localhost';
    
  3. Execute os comandos a seguir para criar um banco de dados adventureworks.

    CREATE DATABASE adventureworks;
    
  4. Feche o utilitário mysql com o comando Encerrar.

  5. Importe o esquema adventureworks para o serviço de Banco de Dados do Azure para MySQL. Você está executando a importação como azureuser, portanto, insira a senha Pa55w.rd quando solicitado.

    mysql -h adventureworks[nnnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks < adventureworks_mysql_schema.sql
    

Executar uma migração online usando o Serviço de Migração de Banco de Dados

  1. Alterne novamente para o portal do Azure.

  2. Clique em Todos os serviços, em Assinaturas e na sua assinatura.

  3. Na página da sua assinatura, em Configurações, clique em Provedores de recursos.

  4. Na caixa Filtrar por nome, digite DataMigration e clique em Microsoft.DataMigration.

  5. Se o Microsoft.DataMigration não estiver registrado, clique em Registrar e aguarde o Status mudar para Registrado. Pode ser necessário clicar em Atualizar para ver a alteração do status.

  6. Selecione Criar um recurso, na caixa Pesquisar no Marketplace, digite Serviço de Migração de Banco de Dados do Azure e pressione Enter.

  7. Na tela Serviço de Migração de Banco de Dados do Azure, selecione Criar.

  8. Na página Criar serviço de migração, insira os seguintes detalhes e escolha Avançar: Rede>>.

    Propriedade Valor
    Selecionar um grupo de recursos migrate-mysql
    Nome do serviço de migração adventureworks_migration_service
    Localização Selecione sua localização mais próxima
    Modo de serviço Azure
    Tipo de preço Premium, com 4 vCores
  9. Na página Rede, selecione a rede virtual MySQLvnet/mysqlvmSubnet. Essa rede foi criada como parte da instalação.

  10. Selecione Examinar + criar e Criar. Aguarde a criação do Serviço de Migração de Banco de Dados. Isto pode levar alguns minutos.

  11. No portal do Azure, vá para a página do seu Serviço de Migração de Banco de Dados.

  12. Selecione Novo projeto de migração.

  13. Na página Novo projeto de migração, insira os detalhes a seguir e selecione Criar e executar atividade.

    Propriedade Valor
    Nome do projeto adventureworks_migration_project
    Tipo do servidor de origem MySQL
    Banco de Dados de destino para MySQL Banco de Dados do Azure para MySQL
    Escolher o tipo de atividade Migração de dados online
  14. Quando o Assistente de migração for iniciado, insira os detalhes a seguir na página Selecionar origem.

    Propriedade Valor
    Nome do servidor de origem nn.nn.nn.nn (O endereço IP da máquina virtual do Azure que está executando o MySQL)
    Porta do servidor 3306
    Nome do Usuário azureuser
    Senha Pa55w.rd
  15. Selecione Avançar: Selecionar destino>>.

  16. Na página Selecionar destino, insira os detalhes a seguir.

    Propriedade Valor
    Nome do servidor de destino adventureworks[nnn].MySQL.database.azure.com
    Nome do Usuário awadmin@adventureworks[nnn]
    Senha Pa55w.rdDemo
  17. Selecione Avançar: Selecionar bancos de dados >>.

  18. Na página Selecionar bancos de dados, tanto o Banco de dados de origem quanto o Banco de dados de destino devem estar definidos como AdventureWorks; em seguida, selecione Avançar: Definir configurações de migração.

  19. Na página Definir configurações de migração, selecione Avançar: Resumo>>.

  20. Na página Resumo da migração, na caixa Nome da atividade, digite AdventureWorks_Migration_Activity e selecione Iniciar migração.

  21. Na página AdventureWorks_Migration_Activity, selecione Atualizar em intervalos de 15 segundos. Você verá o status da operação de migração à medida que ela avança.

  22. Aguarde a coluna DETALHES DA MIGRAÇÃO mudar para Pronto para substituição.

Modificar dados e fazer a substituição para o novo banco de dados

  1. Retorne à página AdventureWorks_Migration_Activity no portal do Azure.

  2. Selecione o banco de dados adventureworks.

  3. Na página adventureworks, verifique se o status de todas as tabelas está marcado como CONCLUÍDO.

  4. Selecione Sincronização de dados incremental. Verifique se o status de todas as tabelas está marcado como Sincronizando.

  5. Volte para a Cloud Shell.

  6. Execute o seguinte comando para se conectar ao banco de dados adventureworks em execução usando o MySQL na máquina virtual:

    mysql -pPa55w.rd adventureworks
    
  7. Execute as seguintes instruções SQL para exibir e depois remover as ordens 43659, 43660 e 43661 do banco de dados.

    SELECT * FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    SELECT * FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
    DELETE FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    DELETE FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
    
  8. Feche o utilitário mysql com o comando Encerrar.

  9. Volte para a página adventureworks no portal do Azure e selecione Atualizar. Role até a página para as tabelas salesorderheader e salesorderdetail. Verifique se a tabela salesorderheader indica que 3 linhas foram excluídas e 29 linhas foram removidas da tabela sales.salesorderdetail. Se nenhuma atualização for aplicada, verifique se há Alterações pendentes para o banco de dados.

  10. Selecione Iniciar substituição.

  11. Na página Concluir a substituição, escolha Confirmar e Aplicar. Aguarde o status mudar para Concluído.

  12. Retorne ao Cloud Shell.

  13. Execute o seguinte comando para se conectar ao banco de dados azureadventureworks em execução usando seu serviço de Banco de Dados do Azure para MySQL:

    mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks
    
  14. Execute as instruções SQL a seguir para exibir as ordens e os detalhes dos pedidos 43659, 43660 e 43661. A finalidade dessas consultas é mostrar que os dados foram transferidos:

    SELECT * FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661);
    SELECT * FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
    

    A primeira consulta deve retornar 3 linhas. A segunda consulta deve retornar 29 linhas.

  15. Feche o utilitário mysql com o comando Encerrar.

  16. Feche a conexão ssh com o comando Sair.

Limpar os recursos criados

Importante

Se você tiver executado essas etapas em sua assinatura pessoal, poderá excluir os recursos individualmente ou excluir o grupo de recursos para eliminar o conjunto inteiro de recursos. Recursos deixados em execução podem custar dinheiro.

  1. No Cloud Shell, execute o seguinte comando para excluir o grupo de recursos:
az group delete --name migrate-mysql