Exercice : Migrer une base de données MySQL locale vers Azure Database pour MySQL
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.
Dans un navigateur web, ouvrez un nouvel onglet et accédez au portail Azure.
Sélectionnez + Créer une ressource.
Dans la zone Rechercher dans la Place de marché, tapez Azure Database pour MySQL, puis appuyez sur entrée.
Dans la page Azure Database pour MySQL , sélectionnez Créer.
Dans la page Sélectionner l’option de déploiement Azure Database pour MySQL, sous Serveur flexible, sélectionnez Créer.
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 Dans la page Vérifier + créer, sélectionnez Créer. Attendez que le service soit créé avant de continuer.
Une fois la ressource créée, sélectionnez Accéder à la ressource.
Sélectionnez Sécurité de la connexion.
Dans la page Sécurité de la connexion, définissez Autoriser l’accès aux services Azure sur Oui.
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.
Sélectionnez Ajouter l’adresse IP actuelle du client pour permettre également à votre ordinateur client d’accéder à la base de données.
Sélectionnez Enregistrer, puis attendez que les règles de pare-feu soient mises à jour.
À 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.
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
Connectez-vous à votre ancien serveur de base de données en utilisant SSH. Entrez Pa55w.rdDemo pour le mot de passe.
ssh azureuser@$MYSQLIP
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
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
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';
Exécutez les commandes suivantes pour créer une base de données adventureworks.
CREATE DATABASE adventureworks;
Fermez l’utilitaire mysql à l’aide de la commande quit.
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
Revenez au portail Azure.
Cliquez successivement sur Tous les services, sur Abonnements, puis sur votre abonnement.
Dans la page de votre abonnement, sous Paramètres, cliquez sur Fournisseurs de ressources.
Dans la zone Filtrer par nom, tapez DataMigration, puis cliquez sur Microsoft.DataMigration.
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.
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.
Dans la page Azure Database Migration Service, sélectionnez Créer.
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 Dans la page Réseau, sélectionnez le réseau virtuel MySQLvnet/mysqlvmSubnet. Ce réseau a été créé pendant l’installation.
Sélectionnez Vérifier + créer, puis Créer. Patientez le temps que Database Migration Service soit créé. Cette opération prendra quelques minutes.
Sur le portail Azure, accédez à la page de votre instance Database Migration Service.
Sélectionnez Nouveau projet de migration.
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 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 Sélectionnez Suivant : Sélectionner la cible>>.
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 Sélectionnez Suivant : Sélectionner les bases de données>>.
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.
Dans la page Configurer les paramètres de migration, sélectionnez Suivant : Récapitulatif>>.
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.
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.
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
Revenez à la page AdventureWorks_Migration_Activity sur le portail Azure.
Sélectionnez la base de données adventureworks.
Dans la page adventureworks, vérifiez que l’état de toutes les tables est marqué TERMINÉ.
Sélectionnez Synchronisation des données incrémentielles. Vérifiez que l’état de chaque table est marqué En cours de synchronisation.
Revenez à Cloud Shell.
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
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);
Fermez l’utilitaire mysql à l’aide de la commande quit.
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.
Sélectionnez Démarrer le basculement.
Dans la page Terminer le basculement, sélectionnez Confirmer, puis Appliquer. Attendez que l’état passe à Terminé.
Revenez à Cloud Shell.
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
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.
Fermez l’utilitaire mysql à l’aide de la commande quit.
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.
- Dans Cloud Shell, exécutez cette commande pour supprimer le groupe de ressources :
az group delete --name migrate-mysql