Übung: Migrieren einer lokalen MySQL-Datenbank zu Azure Database for MySQL

Abgeschlossen

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.

  1. Öffnen Sie in einem Webbrowser eine neue Registerkarte, und navigieren Sie zum Azure-Portal.

  2. Klicken Sie auf + Ressource erstellen.

  3. Geben Sie im Feld Marketplace durchsuchen den Suchbegriff Azure Database for MySQL ein, und drücken Sie die EINGABETASTE.

  4. Klicken Sie auf der Seite Azure Database for MySQL auf Erstellen.

  5. 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.

  6. 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
  7. Wählen Sie auf der Seite Überprüfen + erstellen die Option Erstellen aus. Warten Sie, bis der Dienst erstellt wurde, bevor Sie fortfahren.

  8. Nachdem der Dienst erstellt wurde, klicken Sie auf Zu Ressource wechseln.

  9. Klicken Sie auf Verbindungssicherheit.

  10. Legen Sie auf der Seite Verbindungssicherheit für Zugriff auf Azure-Dienste erlauben die Option Ja fest.

  11. 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.

  12. Klicken Sie auf Aktuelle Client-IP-Adresse hinzufügen, damit Ihr Clientcomputer auch auf die Datenbank zugreifen kann.

  13. Klicken Sie auf Speichern, und warten Sie, bis die Firewallregeln aktualisiert wurden.

  14. 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.

  1. 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
    
  2. Stellen Sie mit SSH eine Verbindung mit Ihrem alten Datenbankserver her. Geben Sie Pa55w.rdDemo als Kennwort ein.

    ssh azureuser@$MYSQLIP
    
  3. 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

  1. 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
    
  2. 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';
    
  3. Führen Sie die folgenden Befehle aus, um die Datenbank adventureworks zu erstellen.

    CREATE DATABASE adventureworks;
    
  4. Schließen Sie das Hilfsprogramm mysql mit dem Befehl quit.

  5. 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

  1. Kehren Sie zum Azure-Portal zurück.

  2. Klicken Sie auf Alle Dienste, dann auf Abonnements und schließlich auf Ihr Abonnement.

  3. Klicken Sie auf der Abonnementseite unter Einstellungen auf Ressourcenanbieter.

  4. Geben Sie im Feld Nach Name filtern den Begriff DataMigration ein, und wählen Sie dann die Option Microsoft.DataMigration aus.

  5. 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.

  6. Klicken Sie auf Ressource erstellen, geben Sie im Feld Marketplace durchsuchen den Suchbegriff Azure Database Migration Service ein, und drücken Sie die EINGABETASTE.

  7. Klicken Sie auf der Seite Azure Database Migration Service auf Erstellen.

  8. 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
  9. Wählen Sie auf der Seite Netzwerk das virtuelle Netzwerk MySQLvnet/mysqlvmSubnet aus. Dieses Netzwerk wurde im Rahmen der Einrichtung erstellt.

  10. 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.

  11. Navigieren Sie im Azure-Portal zur Seite für Ihre Database Migration Service-Instanz.

  12. Wählen Sie Neues Migrationsprojekt aus.

  13. 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
  14. 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
  15. Klicken Sie auf Weiter: Ziel auswählen>>.

  16. 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
  17. Klicken Sie auf Weiter: Datenbanken auswählen>>.

  18. 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.

  19. Klicken Sie auf der Seite Migrationseinstellungen konfigurieren auf Weiter: Zusammenfassung>>.

  20. Geben Sie auf der Seite Migrationszusammenfassung im Feld Aktivitätsname den Namen AdventureWorks_Migration_Activity ein, und klicken Sie dann auf Migration starten.

  21. 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.

  22. Warten Sie, bis die Angabe in der Spalte MIGRATIONSDETAILS in Zur Übernahme bereit geändert wurde.

Ändern von Daten und Übernahme der neuen Datenbank

  1. Kehren Sie zur Seite AdventureWorks_Migration_Activity im Azure-Portal zurück.

  2. Wählen Sie die Datenbank adventureworks aus.

  3. Überprüfen Sie auf der Seite adventureworks, ob als Status für alle Tabellen ABGESCHLOSSEN angegeben ist.

  4. Klicken Sie auf Inkrementelle Datensynchronisierung. Stellen Sie sicher, dass als Status für alle Tabellen Wird synchronisiert angegeben ist.

  5. Wechseln Sie zurück zu Cloud Shell.

  6. 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
    
  7. 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);
    
  8. Schließen Sie das Hilfsprogramm mysql mit dem Befehl quit.

  9. 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.

  10. Klicken Sie auf Übernahme starten.

  11. 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.

  12. Wechseln Sie wieder zu Cloud Shell.

  13. 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
    
  14. 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.

  15. Schließen Sie das Hilfsprogramm mysql mit dem Befehl quit.

  16. 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.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um die Ressourcengruppe zu löschen:
az group delete --name migrate-mysql