Esercizio - Eseguire la migrazione di un database MySQL locale in Database di Azure per MySQL
In questo esercizio si eseguirà la migrazione di un database MySQL in Azure. Un database MySQL esistente, in esecuzione su una macchina virtuale, verrà migrato in Database di Azure per MySQL.
Si supponga di lavorare come sviluppatore di database per l'organizzazione AdventureWorks. Da oltre dieci anni, questa organizzazione si occupa della vendita di biciclette e di parti di biciclette direttamente ai clienti finali e ai distributori. I sistemi archiviano le informazioni in un database che attualmente viene eseguito usando MySQL su una macchina virtuale di Azure. Nell'ambito di un progetto di razionalizzazione dell'hardware, AdventureWorks intende spostare il database in un database gestito di Azure. Si è ricevuto l'incarico di eseguire la migrazione.
Importante
Il Servizio Migrazione del database di Azure non è supportato nell'ambiente sandbox di Azure gratuito. È possibile eseguire questi passaggi nella propria sottoscrizione o semplicemente leggere la procedura per comprendere come eseguire la migrazione del database.
Configurare l'ambiente
Eseguire i comandi seguenti dell'interfaccia della riga di comando di Azure in Cloud Shell per creare una macchina virtuale, che esegue MySQL, con una copia del database di AdventureWorks. Gli ultimi comandi mostreranno l'indirizzo IP della nuova macchina virtuale.
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
Il completamento di questi comandi richiederà circa 5 minuti. Non è necessario attendere. È possibile continuare con la procedura seguente.
Creare il database di Azure per il server MySQL e il database
La prima fase del progetto richiede la creazione di un database di Azure per MySQL per ospitare il nuovo database aziendale.
Usando un Web browser, aprire una nuova scheda e passare al portale di Azure.
Selezionare + Crea una risorsa.
Nella casella Cerca nel Marketplace digitare Database di Azure per MySQL e premere INVIO.
Nella pagina Database di Azure per MySQL selezionare Crea.
Nella pagina Selezionare l'opzione di distribuzione del database di Azure per MySQL, in Server flessibile, selezionare Crea.
Nella pagina Crea server MySQL inserire i dettagli seguenti e quindi selezionare Rivedi e crea:
Proprietà valore Gruppo di risorse migrate-mysql Nome del server adventureworksnnn, dove nnn è un suffisso di propria scelta per rendere univoco il nome del server Origine dati Nessuno Ufficio Selezionare la posizione più vicina Versione 5.7 Calcolo e archiviazione Selezionare Configura server, quindi il piano tariffario Basic e infine OK Nome utente amministratore awadmin Password Pa55w.rdDemo Conferma password Pa55w.rdDemo Nella pagina Rivedi e crea selezionare Crea. Prima di continuare, attendere che il servizio sia stato creato.
Una volta creato il servizio, selezionare Vai alla risorsa.
Selezionare Sicurezza delle connessioni.
Nella pagina Sicurezza delle connessioni impostare Consenti l'accesso a Servizi di Azure su Sì.
Nell'elenco delle regole del firewall aggiungere una regola denominata VM e quindi impostare INDIRIZZO IP INIZIALE e INDIRIZZO IP FINALE sull'indirizzo IP della macchina virtuale che esegue il server MySQL. Si tratta dell'indirizzo IP elencato come ultima riga in Cloud Shell.
Selezionare Aggiungi indirizzo IP client corrente per consentire anche al computer client di accedere al database.
Scegliere Salva e attendere l'aggiornamento delle regole del firewall.
Al prompt di Cloud Shell eseguire il comando seguente per creare un nuovo database nel servizio Database di Azure per MySQL. Sostituire [nnn] con il suffisso usato al momento della creazione del servizio Database di Azure per MySQL. Sostituire [resource group] con il nome del gruppo di risorse specificato per il servizio:
az MySQL db create \ --name azureadventureworks \ --server-name adventureworks[nnn] \ --resource-group migrate-mysql
Se il database viene creato correttamente, dovrebbe essere visualizzato un messaggio simile al seguente:
{ "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" }
Esportare lo schema da usare nel database di destinazione
A questo punto è possibile connettersi alla macchina virtuale MySQL esistente usando Cloud Shell per esportare lo schema del database.
Eseguire questo comando dell'interfaccia della riga di comando di Azure per visualizzare l'indirizzo IP relativo alla macchina virtuale esistente.
MYSQLIP="$(az vm list-ip-addresses \ --resource-group migrate-mysql \ --name mysqlvm \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $MYSQLIP
Connettersi al server di database precedente usando SSH. Immettere Pa55w.rdDemo come password.
ssh azureuser@$MYSQLIP
Esportare lo schema per il database di origine con l'utilità mysqldump:
mysqldump -u azureuser -pPa55w.rd adventureworks --no-data > adventureworks_mysql_schema.sql
Importare lo schema nel database di destinazione
In Cloud Shell, eseguire il comando seguente per connettersi al server azureadventureworks[nnn]. Sostituire le due istanze di [nnn] con il suffisso relativo al servizio. Si noti che il nome utente ha il suffisso @adventureworks[nnn]. Quando viene richiesta la password, immettere Pa55w.rdDemo.
mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo
Eseguire i comandi seguenti per creare un utente denominato azureuser e impostare la password corrispondente su Pa55w.rd. La seconda istruzione concede all'utente azureuser i privilegi necessari per creare oggetti nel database azureadventureworks.
GRANT SELECT ON *.* TO 'azureuser'@'localhost' IDENTIFIED BY 'Pa55w.rd'; GRANT CREATE ON *.* TO 'azureuser'@'localhost';
Eseguire i comandi seguenti per creare un database adventureworks.
CREATE DATABASE adventureworks;
Chiudere l'utilità mysql con il comando quit.
Importare lo schema adventureworks nel servizio Database di Azure per MySQL. Si sta eseguendo l'importazione come azureuser, quindi immettere la password Pa55w.rd quando viene richiesta.
mysql -h adventureworks[nnnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks < adventureworks_mysql_schema.sql
Eseguire una migrazione online con il Servizio Migrazione del database
Tornare al portale di Azure.
Fare clic su Tutti i servizi, selezionare Sottoscrizioni e fare clic sulla propria sottoscrizione.
Nella pagina relativa alla sottoscrizione, in Impostazioni, fare clic su Provider di risorse.
Nella casella Filtra per nome digitare DataMigration e quindi fare clic su Microsoft.DataMigration.
Se il provider di risorse Microsoft.DataMigration non è registrato, fare clic su Registra e attendere che il valore di Stato diventi Registrato. Per visualizzare la modifica dello stato, potrebbe essere necessario fare clic su Aggiorna.
Selezionare Crea una risorsa, nella casella Cerca nel Marketplace digitare Servizio Migrazione del database di Azure e quindi premere INVIO.
Nella pagina Servizio Migrazione del database di Azure selezionare Crea.
Nella pagina Crea servizio migrazione immettere i dettagli seguenti e quindi selezionare Avanti: Rete>>.
Proprietà valore Selezionare un gruppo di risorse migrate-mysql Nome del servizio di migrazione adventureworks_migration_service Ufficio Selezionare la posizione più vicina Modalità servizio Azure Piano tariffario Premium, con 4 vCore Nella pagina Rete selezionare la rete virtuale MySQLvnet/mysqlvmSubnet. Questa rete è stata creata durante la fase di configurazione.
Selezionare Rivedi e crea e quindi Crea. Attendere che il Servizio Migrazione del database venga creato. L'operazione richiederà qualche minuto.
Nel portale di Azure andare alla pagina Servizio Migrazione del database.
Selezionare Nuovo progetto di migrazione.
Nella pagina Nuovo progetto di migrazione immettere i dettagli seguenti e quindi selezionare Crea ed esegui attività.
Proprietà valore Nome progetto adventureworks_migration_project Tipo del server di origine MySQL Database di destinazione per MySQL Database di Azure per MySQL Scegli il tipo di attività Migrazione dei dati online Quando si avvia la Migrazione guidata, nella pagina Selezionare l'origine immettere i dettagli seguenti.
Proprietà valore Nome del server di origine nn.nn.nn.nn (l'indirizzo IP della macchina virtuale di Azure che esegue MySQL) Porta server 3306 Nome utente azureuser Password Pa55w.rd Selezionare Avanti: Seleziona la destinazione>>.
Nella pagina Seleziona destinazione immettere i dettagli seguenti.
Proprietà valore Nome del server di destinazione adventureworks[nnn].MySQL.database.azure.com Nome utente awadmin@adventureworks[nnn] Password Pa55w.rdDemo Selezionare Avanti: Seleziona database>>.
Nella pagina Seleziona database verificare che il Database di origine e il Database di destinazione siano entrambi impostati su adventureworks e quindi selezionare Avanti: Configura le impostazioni di migrazione.
Nella pagina Configura le impostazioni di migrazione selezionare Avanti: Riepilogo>>.
Nella pagina Riepilogo della migrazione, nella casella Nome attività, digitare AdventureWorks_Migration_Activity e quindi selezionare Avvia migrazione.
Nella pagina AdventureWorks_Migration_Activity selezionare Aggiorna a intervalli di 15 secondi. Durante la migrazione verrà visualizzato lo stato di avanzamento dell'operazione.
Attendere che la colonna DETTAGLI DELLA MIGRAZIONE risulti impostata su Pronto per il cutover.
Modificare i dati e completare la migrazione al nuovo database
Tornare alla pagina AdventureWorks_Migration_Activity nel portale di Azure.
Selezionare il database adventureworks.
Nella pagina adventureworks verificare che lo stato di tutte le tabelle sia contrassegnato come COMPLETATO.
Selezionare Sincronizzazione dati incrementale. Verificare che lo stato di ogni tabella sia contrassegnato come Sincronizzazione.
Tornare a Cloud Shell.
Eseguire il comando seguente per connettersi al database adventureworks in esecuzione usando MySQL nella macchina virtuale:
mysql -pPa55w.rd adventureworks
Eseguire le istruzioni SQL seguenti per visualizzare e quindi rimuovere gli ordini 43659, 43660 e 43661 dal database.
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);
Chiudere l'utilità mysql con il comando quit.
Tornare alla pagina adventureworks nel portale di Azure e selezionare Aggiorna. Scorrere fino alla pagina per le tabelle salesorderheader e salesorderdetail. Verificare che la tabella salesorderheader indichi che 3 righe sono state eliminate e 29 righe sono state rimosse dalla tabella sales.salesorderdetail. Se non sono stati applicati aggiornamenti, verificare che siano presenti Modifiche in sospeso per il database.
Selezionare Avvia cutover.
Nella pagina Completa cutover selezionare Conferma e quindi Applica. Attendere finché lo stato non diventa Completato.
Tornare a Cloud Shell.
Eseguire il comando seguente per connettersi al database azureadventureworks in esecuzione usando il servizio Database di Azure per MySQL:
mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks
Eseguire le istruzioni SQL seguenti per visualizzare gli ordini 43659, 43660 e 43661 e i relativi dettagli. Lo scopo di queste query è mostrare che i dati sono stati trasferiti:
SELECT * FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661); SELECT * FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
La prima query deve restituire 3 righe. La seconda query deve restituire 29 righe.
Chiudere l'utilità mysql con il comando quit.
Chiudere la connessione SSH con il comando exit.
Eseguire la pulizia delle risorse create
Importante
Se questi passaggi sono stati eseguiti nella sottoscrizione personale, è possibile eliminare le singole risorse oppure il gruppo, per rimuovere l'intero set di risorse. Le risorse che rimangono in esecuzione hanno un costo.
- Usando Cloud Shell, eseguire il comando seguente per eliminare il gruppo di risorse:
az group delete --name migrate-mysql