Exercice : Migrer une base de données MySQL locale vers Azure Database pour MySQL

Effectué

Dans cet exercice, vous allez migrer une base de données MySQL vers Azure. Vous allez migrer une base de données MySQL existante s’exécutant sur une machine virtuelle vers Azure Database pour MySQL.

Vous travaillez en tant que développeur de base de données pour l’organisation AdventureWorks. AdventureWorks vend des vélos et des pièces de vélos directement aux consommateurs finaux et à des distributeurs depuis plus de dix ans. Ses systèmes stockent les informations dans une base de données qui s’exécute actuellement avec MySQL sur une machine virtuelle Azure. Dans une optique de rationalisation matérielle, AdventureWorks souhaite déplacer la base de données dans une base de données managée Azure. Vous avez été chargé de mener à bien cette migration.

Important

Azure Data Migration Service n’est pas pris en charge dans l’environnement de bac à sable (sandbox) Azure gratuit. Vous pouvez effectuer ces étapes dans votre propre abonnement personnel ou simplement observer pour comprendre comment migrer votre base de données.

Configurer l’environnement

Exécutez ces commandes Azure CLI dans Cloud Shell pour créer une machine virtuelle, en exécutant MySQL, avec une copie de la base de données AdventureWorks. Les dernières commandes impriment l’adresse IP de la nouvelle machine virtuelle.

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

L’exécution de ces commandes prend environ cinq minutes. Vous n’avez pas besoin d’attendre et pouvez passer aux étapes ci-dessous.

Créer le serveur et la base de données Azure Database pour MySQL

Dans la première phase du projet, vous devez créer un service Azure Database pour MySQL pour héberger la nouvelle base de données de votre entreprise.

  1. Dans un navigateur web, ouvrez un nouvel onglet et accédez au portail Azure.

  2. Sélectionnez + Créer une ressource.

  3. Dans la zone Rechercher dans la Place de marché, tapez Azure Database pour MySQL, puis appuyez sur entrée.

  4. Dans la page Azure Database pour MySQL , sélectionnez Créer.

  5. Dans la page Sélectionner l’option de déploiement Azure Database pour MySQL, sous Serveur flexible, sélectionnez Créer.

  6. Dans la page Créer un serveur MySql, entrez les détails suivants, puis sélectionnez Vérifier + créer :

    Propriété Valeur
    Resource group migrate-mysql
    Nom du serveur adventureworksnnn, où nnn représente le suffixe que vous choisissez pour rendre le nom du serveur unique
    Source de données Aucun
    Emplacement Sélectionnez la localisation la plus proche.
    Version 5.7
    Calcul + stockage Sélectionnez successivement Configurer le serveur, le niveau tarifaire De base, puis OK.
    Nom d’utilisateur administrateur awadmin
    Mot de passe Pa55w.rdDemo
    Confirmer le mot de passe Pa55w.rdDemo
  7. Dans la page Vérifier + créer, sélectionnez Créer. Attendez que le service soit créé avant de continuer.

  8. Une fois la ressource créée, sélectionnez Accéder à la ressource.

  9. Sélectionnez Sécurité de la connexion.

  10. Dans la page Sécurité de la connexion, définissez Autoriser l’accès aux services Azure sur Oui.

  11. Dans la liste des règles de pare-feu, ajoutez une règle nommée Machine virtuelle, puis définissez l’ADRESSE IP DE DÉBUT et l’ADRESSE IP DE FIN sur l’adresse IP de la machine virtuelle exécutant le serveur MySQL. Il s’agit de l’adresse IP qui correspond à la dernière ligne dans Cloud Shell.

  12. Sélectionnez Ajouter l’adresse IP actuelle du client pour permettre également à votre ordinateur client d’accéder à la base de données.

  13. Sélectionnez Enregistrer, puis attendez que les règles de pare-feu soient mises à jour.

  14. À l’invite Cloud Shell, exécutez la commande suivante pour créer une nouvelle base de données dans votre service Azure Database pour MySQL. Remplacez [nnn] par le suffixe que vous avez utilisé au moment de créer le service Azure Database pour MySQL. Remplacez [resource group] par le nom du groupe de ressources que vous avez spécifié pour le service :

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

    Si la création de la base de données a abouti, vous obtenez un message de ce type :

    {
          "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"
    }
    

Exporter le schéma à utiliser dans la base de données cible

Vous allez maintenant vous connecter à votre machine virtuelle MySQL existante à l’aide de Cloud Shell pour exporter le schéma de votre base de données.

  1. Exécutez cette commande Azure CLI pour afficher l’adresse IP de votre machine virtuelle existante.

    MYSQLIP="$(az vm list-ip-addresses \
        --resource-group migrate-mysql \
        --name mysqlvm \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $MYSQLIP
    
  2. Connectez-vous à votre ancien serveur de base de données en utilisant SSH. Entrez Pa55w.rdDemo pour le mot de passe.

    ssh azureuser@$MYSQLIP
    
  3. Exportez le schéma de la base de données source à l’aide de l’utilitaire mysqldump :

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

Importer le schéma dans la base de données cible

  1. Dans Cloud Shell, exécutez la commande suivante pour vous connecter au serveur azureadventureworks[nnn]. Remplacez les deux occurrences de [nnn] par le suffixe de votre service. Notez que le nom d’utilisateur a le suffixe @adventureworks[nnn]. À l’invite du mot de passe, entrez Pa55w.rdDemo.

    mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo
    
  2. Exécutez les commandes suivantes pour créer un utilisateur nommé azureuser et définissez le mot de passe de cet utilisateur sur Pa55w.rd. La deuxième instruction confère à l’utilisateur azureuser les privilèges nécessaires pour créer des objets dans la base de données azureadventureworks.

    GRANT SELECT ON *.* TO 'azureuser'@'localhost' IDENTIFIED BY 'Pa55w.rd';
    GRANT CREATE ON *.* TO 'azureuser'@'localhost';
    
  3. Exécutez les commandes suivantes pour créer une base de données adventureworks.

    CREATE DATABASE adventureworks;
    
  4. Fermez l’utilitaire mysql à l’aide de la commande quit.

  5. Importez le schéma adventureworks dans votre service Azure Database pour MySQL. Si vous effectuez l’importation sous le nom azureuser, entrez le mot de passe Pa55w.rd quand vous y êtes invité.

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

Effectuer une migration en ligne à l’aide de Database Migration Service

  1. Revenez au portail Azure.

  2. Cliquez successivement sur Tous les services, sur Abonnements, puis sur votre abonnement.

  3. Dans la page de votre abonnement, sous Paramètres, cliquez sur Fournisseurs de ressources.

  4. Dans la zone Filtrer par nom, tapez DataMigration, puis cliquez sur Microsoft.DataMigration.

  5. Si Microsoft.DataMigration n’est pas inscrit, cliquez sur Inscrire, puis attendez que l’État passe à Inscrit. Il peut être nécessaire de cliquer sur Actualiser pour faire apparaître le changement d’état.

  6. Sélectionnez Créer une ressource, dans la zone Rechercher dans la Place de marché, tapez Azure Database Migration Service, puis appuyez sur Entrée.

  7. Dans la page Azure Database Migration Service, sélectionnez Créer.

  8. Dans la page Créer un service de migration, entrez les informations suivantes, puis sélectionnez Suivant : Réseau>>.

    Propriété Value
    Sélectionner un groupe de ressources migrate-mysql
    Nom du service de migration adventureworks_migration_service
    Localisation Sélectionnez la localisation la plus proche.
    Mode de service Microsoft Azure
    Niveau tarifaire Premium, avec 4 vCores
  9. Dans la page Réseau, sélectionnez le réseau virtuel MySQLvnet/mysqlvmSubnet. Ce réseau a été créé pendant l’installation.

  10. Sélectionnez Vérifier + créer, puis Créer. Patientez le temps que Database Migration Service soit créé. Cette opération prendra quelques minutes.

  11. Sur le portail Azure, accédez à la page de votre instance Database Migration Service.

  12. Sélectionnez Nouveau projet de migration.

  13. Dans la page Nouveau projet de migration, entrez les informations suivantes, puis sélectionnez Créer et exécuter une activité.

    Propriété Value
    Nom du projet adventureworks_migration_project
    Type du serveur source MySQL
    Base de données cible pour MySQL Azure Database pour MySQL
    Choisir un type d’activité Migration de données en ligne
  14. Au démarrage de l’Assistant Migration, dans la page Sélectionner une source, entrez les informations suivantes.

    Propriété Value
    Nom du serveur source nn.nn.nn.nn (Adresse IP de la machine virtuelle Azure exécutant MySQL)
    Port du serveur 3306
    User Name azureuser
    Mot de passe Pa55w.rd
  15. Sélectionnez Suivant : Sélectionner la cible>>.

  16. Dans la page Sélectionner la cible, entrez les informations suivantes.

    Propriété Value
    Nom du serveur cible adventureworks[nnn].MySQL.database.azure.com
    User Name awadmin@adventureworks[nnn]
    Mot de passe Pa55w.rdDemo
  17. Sélectionnez Suivant : Sélectionner les bases de données>>.

  18. Dans la page Sélectionner les bases de données, vérifiez que la Base de données source et la Base de données cible sont définies sur adventureworks, puis sélectionnez Suivant : Configurer les paramètres de migration.

  19. Dans la page Configurer les paramètres de migration, sélectionnez Suivant : Récapitulatif>>.

  20. Dans la page Récapitulatif de la migration, dans la zone Nom de l’activité, tapez AdventureWorks_Migration_Activity, puis sélectionnez Démarrer la migration.

  21. Dans la page AdventureWorks_Migration_Activity, sélectionnez Actualiser par intervalles de 15 secondes. L’état de l’opération de migration s’affiche à mesure qu’elle progresse.

  22. Attendez que la colonne DÉTAILS DE LA MIGRATION passe à Prêt pour le basculement.

Modifier les données et basculer vers la nouvelle base de données

  1. Revenez à la page AdventureWorks_Migration_Activity sur le portail Azure.

  2. Sélectionnez la base de données adventureworks.

  3. Dans la page adventureworks, vérifiez que l’état de toutes les tables est marqué TERMINÉ.

  4. Sélectionnez Synchronisation des données incrémentielles. Vérifiez que l’état de chaque table est marqué En cours de synchronisation.

  5. Revenez à Cloud Shell.

  6. Exécutez la commande suivante pour vous connecter à la base de données adventureworks s’exécutant avec MySQL sur la machine virtuelle :

    mysql -pPa55w.rd adventureworks
    
  7. Exécutez les instructions SQL suivantes pour afficher et ensuite supprimer les commandes 43659, 43660 et 43661 de la base de données.

    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. Fermez l’utilitaire mysql à l’aide de la commande quit.

  9. Revenez à la page adventureworks sur le portail Azure, puis sélectionnez Actualiser. Faites défiler la page jusqu’aux tables salesorderheader et salesorderdetail. Vérifiez que la table salesorderheader indique bien que 3 lignes ont été supprimées et vérifiez que 29 lignes ont été supprimées de la table sales.salesorderdetail. Si aucune mise à jour n’est appliquée, vérifiez qu’il y a des Changements en attente pour la base de données.

  10. Sélectionnez Démarrer le basculement.

  11. Dans la page Terminer le basculement, sélectionnez Confirmer, puis Appliquer. Attendez que l’état passe à Terminé.

  12. Revenez à Cloud Shell.

  13. Exécutez la commande suivante pour vous connecter à la base de données azureadventureworks s’exécutant avec votre service Azure Database pour MySQL :

    mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks
    
  14. Exécutez les instructions SQL suivantes pour afficher les commandes et les détails des commandes 43659, 43660 et 43661. Le but de ces requêtes est de montrer que les données ont été transférées :

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

    La première requête doit retourner 3 lignes. La deuxième requête doit retourner 29 lignes.

  15. Fermez l’utilitaire mysql à l’aide de la commande quit.

  16. Fermez la connexion ssh à l’aide de la commande exit.

Nettoyer les ressources que vous avez créées

Important

Si vous avez effectué ces étapes dans votre propre abonnement, vous pouvez supprimer les ressources individuellement ou supprimer le groupe de ressources, c’est-à-dire le jeu complet de ressources. Les ressources laissées en cours d’exécution peuvent vous coûter de l’argent.

  1. Dans Cloud Shell, exécutez cette commande pour supprimer le groupe de ressources :
az group delete --name migrate-mysql