Übung: Migrieren einer lokalen MySQL-Datenbank zu Azure Database for MySQL
In dieser Übung migrieren Sie eine MySQL-Datenbank zu Azure. Genauer gesagt migrieren Sie eine vorhandene MySQL-Datenbank, die auf einer VM ausgeführt wird, zu Azure Database for MySQL.
Sie arbeiten als Datenbankentwickler für die Organisation AdventureWorks. AdventureWorks verkauft seit mehr als zehn Jahren Fahrräder und Zubehör direkt an Endkunden und Vertriebspartner. In den Systemen dieser Organisation werden Informationen in einer Datenbank gespeichert, die aktuell mit MySQL auf einer Azure-VM ausgeführt wird. Im Rahmen einer Hardwarerationalisierung möchte AdventureWorks die Datenbank in eine von Azure verwaltete Datenbank verschieben. Sie wurden mit der Durchführung dieser Migration beauftragt.
Wichtig
Azure Database Migration Service wird in der kostenlosen Azure-Sandboxumgebung nicht unterstützt. Sie können die Schritte in Ihrem persönlichen Abonnement ausführen oder einfach nur die Erläuterungen lesen, um zu erfahren, wie Sie Ihre Datenbank migrieren.
Einrichten der Umgebung
Führen Sie die folgenden Azure CLI-Befehle in Cloud Shell aus, um eine VM zu erstellen, auf der MySQL ausgeführt wird und die eine Kopie der Datenbank von AdventureWorks enthält. Die letzten Befehle geben die IP-Adresse der neuen VM zurück.
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
Die Ausführung dieser Befehle dauert etwa fünf Minuten. Sie müssen jedoch nicht warten, sondern können mit den unten stehenden Schritten fortfahren.
Erstellen des Servers und der Datenbank für Azure Database for MySQL
In der ersten Phase des Projekts müssen Sie eine Azure Database for MySQL-Instanz erstellen, die die neue Datenbank Ihres Unternehmen hostet.
Öffnen Sie in einem Webbrowser eine neue Registerkarte, und navigieren Sie zum Azure-Portal.
Klicken Sie auf + Ressource erstellen.
Geben Sie im Feld Marketplace durchsuchen den Suchbegriff Azure Database for MySQL ein, und drücken Sie die EINGABETASTE.
Klicken Sie auf der Seite Azure Database for MySQL auf Erstellen.
Wählen Sie auf der Seite Select Azure Database for MySQL deployment option (Bereitstellungsoption für Azure Database for MySQL auswählen) unter Flexibler Server die Option Erstellen aus.
Geben Sie auf der Seite MySQL-Server erstellen die folgenden Details ein, und klicken Sie dann auf Überprüfen + erstellen:
Eigenschaft Wert Resource group migrate-mysql Servername adventureworksnnn, wobei nnn ein Suffix Ihrer Wahl ist, durch das der Servername eindeutig wird Datenquelle None Standort Wählen Sie den nächstgelegenen Standort aus. Version 5.7 Compute und Speicher Klicken Sie auf Server konfig., wählen Sie den Tarif Basic aus, und klicken Sie dann auf OK. Administratorbenutzername awadmin Kennwort Pa55w.rdDemo Kennwort bestätigen Pa55w.rdDemo Wählen Sie auf der Seite Überprüfen + erstellen die Option Erstellen aus. Warten Sie, bis der Dienst erstellt wurde, bevor Sie fortfahren.
Nachdem der Dienst erstellt wurde, klicken Sie auf Zu Ressource wechseln.
Klicken Sie auf Verbindungssicherheit.
Legen Sie auf der Seite Verbindungssicherheit für Zugriff auf Azure-Dienste erlauben die Option Ja fest.
Fügen Sie in der Liste der Firewallregeln eine Regel namens VM hinzu, und legen Sie als START-IP-ADRESSE und END-IP-ADRESSE die IP-Adresse der VM fest, die auf dem MySQL-Server ausgeführt wird. Dies ist die IP-Adresse, die als letzte Zeile in Cloud Shell angezeigt wird.
Klicken Sie auf Aktuelle Client-IP-Adresse hinzufügen, damit Ihr Clientcomputer auch auf die Datenbank zugreifen kann.
Klicken Sie auf Speichern, und warten Sie, bis die Firewallregeln aktualisiert wurden.
Führen Sie in der Cloud Shell-Eingabeaufforderung den folgenden Befehl aus, um eine neue Datenbank in Ihrer Azure Database for MySQL-Instanz zu erstellen. Ersetzen Sie dabei [nnn] durch das Suffix, das Sie bei der Erstellung der Azure Database for MySQL-Instanz verwendet haben. Ersetzen Sie [resource group] durch den Ressourcengruppennamen, den Sie für den Dienst angegeben haben:
az MySQL db create \ --name azureadventureworks \ --server-name adventureworks[nnn] \ --resource-group migrate-mysql
Wenn die Datenbank erfolgreich erstellt wurde, sollte eine Meldung ähnlich der folgenden angezeigt werden:
{ "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" }
Exportieren des Schemas zur Verwendung in der Zieldatenbank
Nun stellen Sie in Cloud Shell eine Verbindung mit Ihrer vorhandenen MySQL-VM her, um Ihr Datenbankschema zu exportieren.
Führen Sie den folgenden Azure CLI-Befehl aus, um die IP-Adresse für Ihre vorhandene VM anzuzeigen.
MYSQLIP="$(az vm list-ip-addresses \ --resource-group migrate-mysql \ --name mysqlvm \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $MYSQLIP
Stellen Sie mit SSH eine Verbindung mit Ihrem alten Datenbankserver her. Geben Sie Pa55w.rdDemo als Kennwort ein.
ssh azureuser@$MYSQLIP
Exportieren Sie das Schema für die Quelldatenbank mit dem Hilfsprogramm mysqldump:
mysqldump -u azureuser -pPa55w.rd adventureworks --no-data > adventureworks_mysql_schema.sql
Importieren des Schemas in die Zieldatenbank
Führen Sie in Cloud Shell den folgenden Befehl aus, um eine Verbindung mit dem Server azureadventureworks[nnn] herzustellen. Ersetzen Sie an beiden Stellen [nnn] durch das Suffix für Ihren Dienst. Beachten Sie, dass der Benutzer das Suffix @adventureworks[nnn] aufweist. Geben Sie in der Eingabeaufforderung für das Kennwort Pa55w.rdDemo ein.
mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo
Führen Sie die folgenden Befehle aus, um einen Benutzer namens azureuser zu erstellen und als Kennwort für diesen Benutzer Pa55w.rd festzulegen. Die zweite Anweisung gewährt dem Benutzer azureuser die erforderlichen Berechtigungen, um Objekte in der Datenbank azureadventureworks zu erstellen.
GRANT SELECT ON *.* TO 'azureuser'@'localhost' IDENTIFIED BY 'Pa55w.rd'; GRANT CREATE ON *.* TO 'azureuser'@'localhost';
Führen Sie die folgenden Befehle aus, um die Datenbank adventureworks zu erstellen.
CREATE DATABASE adventureworks;
Schließen Sie das Hilfsprogramm mysql mit dem Befehl quit.
Importieren Sie das adventureworks-Schema in Azure Database for MySQL. Sie führen den Import als azureuser durch. Geben Sie also bei entsprechender Aufforderung das Kennwort Pa55w.rd ein.
mysql -h adventureworks[nnnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks < adventureworks_mysql_schema.sql
Durchführen einer Onlinemigration mit Database Migration Service
Kehren Sie zum Azure-Portal zurück.
Klicken Sie auf Alle Dienste, dann auf Abonnements und schließlich auf Ihr Abonnement.
Klicken Sie auf der Abonnementseite unter Einstellungen auf Ressourcenanbieter.
Geben Sie im Feld Nach Name filtern den Begriff DataMigration ein, und wählen Sie dann die Option Microsoft.DataMigration aus.
Wenn Microsoft.DataMigration nicht registriert ist, klicken Sie auf Registrieren, und warten Sie, bis der Status sich in Registriert ändert. Möglicherweise müssen Sie auf Aktualisieren klicken, damit die Statusänderung angezeigt wird.
Klicken Sie auf Ressource erstellen, geben Sie im Feld Marketplace durchsuchen den Suchbegriff Azure Database Migration Service ein, und drücken Sie die EINGABETASTE.
Klicken Sie auf der Seite Azure Database Migration Service auf Erstellen.
Geben Sie auf der Seite Migrationsdienst erstellen die folgenden Details an, und klicken Sie dann auf Weiter: Netzwerk>>.
Eigenschaft Wert Auswählen einer Ressourcengruppe migrate-mysql Name des Migrationsdiensts adventureworks_migration_service Standort Wählen Sie den nächstgelegenen Standort aus. Dienstmodus Azure Tarif Premium, mit 4 virtuellen Kernen Wählen Sie auf der Seite Netzwerk das virtuelle Netzwerk MySQLvnet/mysqlvmSubnet aus. Dieses Netzwerk wurde im Rahmen der Einrichtung erstellt.
Wählen Sie Überprüfen und erstellen und anschließend Erstellen aus. Warten Sie, bis die Database Migration Service-Instanz erstellt wurde. Dieser Vorgang nimmt einige Minuten in Anspruch.
Navigieren Sie im Azure-Portal zur Seite für Ihre Database Migration Service-Instanz.
Wählen Sie Neues Migrationsprojekt aus.
Geben Sie auf der Seite Neues Migrationsprojekt die folgenden Details ein, und klicken Sie dann auf Aktivität erstellen und ausführen.
Eigenschaft Wert Projektname adventureworks_migration_project Quellservertyp MySQL Target Database for MySQL (Zieldatenbank für MySQL) Azure Database for MySQL Aktivitätstyp auswählen Onlinedatenmigration Wenn der Migrations-Assistent gestartet wurde, geben Sie auf der Seite Quelle auswählen die folgenden Details ein.
Eigenschaft Wert Name des Quellservers nn.nn.nn.nn (Die IP-Adresse der Azure-VM, die MySQL ausführt) Serverport 3306 Benutzername azureuser Kennwort Pa55w.rd Klicken Sie auf Weiter: Ziel auswählen>>.
Geben Sie auf der Seite Ziel auswählen die folgenden Details ein.
Eigenschaft Wert Name des Zielservers adventureworks[nnn].MySQL.database.azure.com Benutzername awadmin@adventureworks[nnn] Kennwort Pa55w.rdDemo Klicken Sie auf Weiter: Datenbanken auswählen>>.
Stellen Sie auf der Seite Datenbanken auswählen sicher, dass sowohl die Quelldatenbank als auch die Zieldatenbank auf adventureworks festgelegt ist, und klicken Sie dann auf Weiter: Migrationseinstellungen konfigurieren.
Klicken Sie auf der Seite Migrationseinstellungen konfigurieren auf Weiter: Zusammenfassung>>.
Geben Sie auf der Seite Migrationszusammenfassung im Feld Aktivitätsname den Namen AdventureWorks_Migration_Activity ein, und klicken Sie dann auf Migration starten.
Klicken Sie auf der Seite AdventureWorks_Migration_Activity in 15-Sekunden-Abständen auf Aktualisieren. So sehen Sie den Fortschritt für den Status des Migrationsvorgangs.
Warten Sie, bis die Angabe in der Spalte MIGRATIONSDETAILS in Zur Übernahme bereit geändert wurde.
Ändern von Daten und Übernahme der neuen Datenbank
Kehren Sie zur Seite AdventureWorks_Migration_Activity im Azure-Portal zurück.
Wählen Sie die Datenbank adventureworks aus.
Überprüfen Sie auf der Seite adventureworks, ob als Status für alle Tabellen ABGESCHLOSSEN angegeben ist.
Klicken Sie auf Inkrementelle Datensynchronisierung. Stellen Sie sicher, dass als Status für alle Tabellen Wird synchronisiert angegeben ist.
Wechseln Sie zurück zu Cloud Shell.
Führen Sie den folgenden Befehl aus, um eine Verbindung mit der Datenbank adventureworks herzustellen, die mit MySQL auf der VM ausgeführt wird:
mysql -pPa55w.rd adventureworks
Führen Sie die folgenden SQL-Anweisungen aus, um die Bestellungen 43659, 43660 und 43661 anzuzeigen und anschließend aus der Datenbank zu entfernen.
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);
Schließen Sie das Hilfsprogramm mysql mit dem Befehl quit.
Kehren Sie zur Seite adventureworks im Azure-Portal zurück, und klicken Sie dann auf Aktualisieren. Scrollen Sie zur Seite für die Tabellen salesorderheader und salesorderdetail. Vergewissern Sie sich, dass angezeigt wird, dass aus der Tabelle salesorderheader 3 Zeilen gelöscht wurden und aus der Tabelle sales.salesorderdetail 29 Zeilen. Wenn keine Aktualisierungen vorgenommen wurden, überprüfen Sie, ob für die Datenbank Ausstehende Änderungen vorliegen.
Klicken Sie auf Übernahme starten.
Klicken Sie auf der Seite Umstellung abschließen auf Bestätigen, und klicken Sie dann auf Anwenden. Warten Sie, bis sich der Status in Abgeschlossen ändert.
Wechseln Sie wieder zu Cloud Shell.
Führen Sie den folgenden Befehl aus, um eine Verbindung mit der Datenbank azureadventureworks herzustellen, die mit Ihrer Azure Database for MySQL-Instanz ausgeführt wird:
mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks
Führen Sie die folgenden SQL-Anweisungen aus, um die Bestellungen 43659, 43660 und 43661 und die zugehörigen Details anzuzeigen. Der Zweck dieser Abfragen besteht darin, zu zeigen, dass die Daten übertragen wurden:
SELECT * FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661); SELECT * FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
Für die erste Abfrage sollten 3 Zeilen zurückgegeben werden, für die zweite Abfrage 29 Zeilen.
Schließen Sie das Hilfsprogramm mysql mit dem Befehl quit.
Trennen Sie die SSH-Verbindung mit dem Befehl exit.
Bereinigen der von Ihnen erstellten Ressourcen
Wichtig
Wenn Sie diese Schritte in Ihrem persönlichen Abonnement ausgeführt haben, können Sie entweder die Ressourcen einzeln löschen oder durch Löschen der Ressourcengruppe alle Ressourcen löschen. Ressourcen, die weiterhin ausgeführt werden, können Sie Geld kosten.
- Führen Sie in Cloud Shell den folgenden Befehl aus, um die Ressourcengruppe zu löschen:
az group delete --name migrate-mysql