Exercício: migrar banco de dados MySQL local para o Banco de Dados do Azure para MySQL
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.
Usando um navegador da Web, abra uma nova guia e navegue até o portal do Azure.
Selecione + Criar um recurso.
Na caixa Pesquisar no Marketplace, digite Banco de Dados do Azure para MySQL e pressione Enter.
Na página Banco de Dados do Azure para MySQL, selecione Criar.
Na página Selecionar opção de implantação do Banco de Dados do Azure para MySQL, em Servidor flexível, selecione Criar.
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 Na página Examinar + criar escolha Criar. Aguarde a criação do serviço antes de continuar.
Após a criação do serviço, escolha Ir para o recurso.
Selecione Segurança da conexão.
Na página Segurança da conexão, defina Permitir acesso aos serviços do Azure como Sim.
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.
Selecione Adicionar endereço IP do cliente atual para habilitar também o computador cliente para acessar o banco de dados.
Salve e aguarde a atualização das regras de firewall.
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.
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
Conecte-se ao servidor de banco de dados antigo usando SSH. Na senha, insira Pa55w.rdDemo.
ssh azureuser@$MYSQLIP
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
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
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';
Execute os comandos a seguir para criar um banco de dados adventureworks.
CREATE DATABASE adventureworks;
Feche o utilitário mysql com o comando Encerrar.
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
Alterne novamente para o portal do Azure.
Clique em Todos os serviços, em Assinaturas e na sua assinatura.
Na página da sua assinatura, em Configurações, clique em Provedores de recursos.
Na caixa Filtrar por nome, digite DataMigration e clique em Microsoft.DataMigration.
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.
Selecione Criar um recurso, na caixa Pesquisar no Marketplace, digite Serviço de Migração de Banco de Dados do Azure e pressione Enter.
Na tela Serviço de Migração de Banco de Dados do Azure, selecione Criar.
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 Na página Rede, selecione a rede virtual MySQLvnet/mysqlvmSubnet. Essa rede foi criada como parte da instalação.
Selecione Examinar + criar e Criar. Aguarde a criação do Serviço de Migração de Banco de Dados. Isto pode levar alguns minutos.
No portal do Azure, vá para a página do seu Serviço de Migração de Banco de Dados.
Selecione Novo projeto de migração.
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 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 Selecione Avançar: Selecionar destino>>.
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 Selecione Avançar: Selecionar bancos de dados >>.
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.
Na página Definir configurações de migração, selecione Avançar: Resumo>>.
Na página Resumo da migração, na caixa Nome da atividade, digite AdventureWorks_Migration_Activity e selecione Iniciar migração.
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.
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
Retorne à página AdventureWorks_Migration_Activity no portal do Azure.
Selecione o banco de dados adventureworks.
Na página adventureworks, verifique se o status de todas as tabelas está marcado como CONCLUÍDO.
Selecione Sincronização de dados incremental. Verifique se o status de todas as tabelas está marcado como Sincronizando.
Volte para a Cloud Shell.
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
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);
Feche o utilitário mysql com o comando Encerrar.
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.
Selecione Iniciar substituição.
Na página Concluir a substituição, escolha Confirmar e Aplicar. Aguarde o status mudar para Concluído.
Retorne ao Cloud Shell.
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
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.
Feche o utilitário mysql com o comando Encerrar.
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.
- No Cloud Shell, execute o seguinte comando para excluir o grupo de recursos:
az group delete --name migrate-mysql