Ćwiczenie: migrowanie lokalnej bazy danych MySQL do usługi Azure Database for MySQL
W tym ćwiczeniu przeprowadzisz migrację bazy danych MySQL na platformę Azure. Zmigrujesz istniejącą bazę danych MySQL działającą na maszynie wirtualnej do usługi Azure Database for MySQL.
Pracujesz jako deweloper bazy danych w organizacji AdventureWorks. AdventureWorks od ponad dekady sprzedaje rowery i części rowerowe bezpośrednio dla konsumentów i dystrybutorów. Ich systemy przechowują informacje w bazie danych, która obecnie działa przy użyciu programu MySQL na maszynie wirtualnej platformy Azure. W ramach ćwiczenia racjonalizacji sprzętu firma AdventureWorks chce przenieść bazę danych do zarządzanej bazy danych platformy Azure. Poproszono Cię o przeprowadzenie tej migracji.
Ważne
Usługa Azure Data Migration Service nie jest obsługiwana w bezpłatnym środowisku piaskownicy platformy Azure. Możesz wykonać te kroki we własnej subskrypcji osobistej lub po prostu postępować zgodnie z instrukcjami, aby dowiedzieć się, jak przeprowadzić migrację bazy danych.
Konfigurowanie środowiska
Uruchom te polecenia interfejsu wiersza polecenia platformy Azure w usłudze Cloud Shell, aby utworzyć maszynę wirtualną z uruchomioną bazą danych MySQL z kopią bazy danych Adventure works. Ostatnie polecenia będą wyświetlać adres IP nowej maszyny wirtualnej.
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
Wykonanie tych poleceń potrwa około 5 minut. Nie musisz czekać, możesz kontynuować wykonywanie poniższych kroków.
Tworzenie serwera i bazy danych usługi Azure Database for MySQL
Pierwsza faza projektu wymaga utworzenia bazy danych usługi Azure Database for MySQL do hostowania firmowej nowej bazy danych.
Za pomocą przeglądarki internetowej otwórz nową kartę i przejdź do witryny Azure Portal.
Wybierz pozycję + Utwórz zasób.
W polu Wyszukaj w witrynie Marketplace wpisz Azure Database for MySQL i naciśnij Enter.
Na stronie Azure Database for MySQL wybierz pozycję Utwórz.
Na stronie Wybieranie opcji wdrażania usługi Azure Database for MySQL w obszarze Serwer elastyczny wybierz pozycję Utwórz.
Na stronie Tworzenie serwera MySQL wprowadź następujące szczegóły, a następnie wybierz pozycję Przejrzyj i utwórz:
Właściwości Wartość Grupa zasobów migrate-mysql Nazwa serwera adventureworksnnn, gdzie nnn jest sufiksem wyboru, aby nazwa serwera był unikatowy Źródło danych Brak Lokalizacja Wybierz najbliższą lokalizację Wersja 5.7 Obliczenia i magazyn Wybierz pozycję Konfiguruj serwer, wybierz warstwę cenową Podstawowa, a następnie wybierz przycisk OK. Nazwa użytkownika administratora awadmin Hasło Pa55w.rdDemo Potwierdź hasło Pa55w.rdDemo Na stronie Przeglądanie i tworzenie wybierz pozycję Utwórz. Przed kontynuowaniem poczekaj na utworzenie usługi.
Po utworzeniu usługi wybierz pozycję Przejdź do zasobu.
Wybierz pozycję Zabezpieczenia połączeń.
Na stronie Zabezpieczenia połączenia ustaw opcję Zezwalaj na dostęp do usług platformy Azure na wartość Tak.
Na liście reguł zapory dodaj regułę o nazwie VM i ustaw początkowy adres IP i KOŃCOWY adres IP na adres IP maszyny wirtualnej z uruchomionym serwerem MySQL. Jest to adres IP wymieniony jako ostatni wiersz w usłudze Cloud Shell.
Wybierz pozycję Dodaj bieżący adres IP klienta, aby umożliwić maszynie klienckiej dostęp do bazy danych.
Zapisz i poczekaj na zaktualizowanie reguł zapory.
W wierszu polecenia usługi Cloud Shell uruchom następujące polecenie, aby utworzyć nową bazę danych w usłudze Azure Database for MySQL. Zastąp ciąg [nnn] sufiksem użytym podczas tworzenia usługi Azure Database for MySQL. Zastąp ciąg [grupa zasobów] nazwą grupy zasobów określonej dla usługi:
az MySQL db create \ --name azureadventureworks \ --server-name adventureworks[nnn] \ --resource-group migrate-mysql
Jeśli baza danych została utworzona pomyślnie, powinien zostać wyświetlony komunikat podobny do następującego:
{ "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" }
Eksportowanie schematu do użycia w docelowej bazie danych
Teraz połączysz się z istniejącą maszyną wirtualną MySQL przy użyciu usługi Cloud Shell, aby wyeksportować schemat bazy danych.
Uruchom to polecenie interfejsu wiersza polecenia platformy Azure, aby wyświetlić adres IP istniejącej maszyny wirtualnej.
MYSQLIP="$(az vm list-ip-addresses \ --resource-group migrate-mysql \ --name mysqlvm \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $MYSQLIP
Połącz się ze starym serwerem bazy danych przy użyciu protokołu SSH. Wprowadź wartość Pa55w.rdDemo jako hasło.
ssh azureuser@$MYSQLIP
Wyeksportuj schemat źródłowej bazy danych przy użyciu narzędzia mysqldump:
mysqldump -u azureuser -pPa55w.rd adventureworks --no-data > adventureworks_mysql_schema.sql
Importowanie schematu do docelowej bazy danych
W usłudze Cloud Shell uruchom następujące polecenie, aby nawiązać połączenie z serwerem azureadventureworks[nnn]. Zastąp dwa wystąpienia elementu [nnn] sufiksem usługi. Należy pamiętać, że nazwa użytkownika ma sufiks @adventureworks[nnn]. W wierszu polecenia hasła wprowadź wartość Pa55w.rdDemo.
mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo
Uruchom następujące polecenia, aby utworzyć użytkownika o nazwie azureuser i ustawić hasło dla tego użytkownika na Pa55w.rd. Druga instrukcja daje użytkownikowi azureuser niezbędne uprawnienia do tworzenia obiektów w bazie danych azureadventureworks .
GRANT SELECT ON *.* TO 'azureuser'@'localhost' IDENTIFIED BY 'Pa55w.rd'; GRANT CREATE ON *.* TO 'azureuser'@'localhost';
Uruchom następujące polecenia, aby utworzyć bazę danych adventureworks .
CREATE DATABASE adventureworks;
Zamknij narzędzie mysql za pomocą polecenia quit .
Zaimportuj schemat adventureworks do usługi Azure Database for MySQL. Import jest wykonywany jako azureuser, więc po wyświetleniu monitu wprowadź hasło Pa55w.rd .
mysql -h adventureworks[nnnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks < adventureworks_mysql_schema.sql
Przeprowadzanie migracji online przy użyciu usługi Database Migration Service
Wróć do witryny Azure Portal.
Kliknij pozycję Wszystkie usługi, kliknij pozycję Subskrypcje, a następnie kliknij swoją subskrypcję.
Na stronie subskrypcji w obszarze Ustawienia kliknij pozycję Dostawcy zasobów.
W polu Filtruj według nazwy wpisz DataMigration, a następnie kliknij pozycję Microsoft.DataMigration.
Jeśli wartość Microsoft.DataMigration nie jest zarejestrowana, kliknij przycisk Zarejestruj i poczekaj na zmianę stanu na Zarejestrowane. Może być konieczne kliknięcie przycisku Odśwież , aby wyświetlić zmianę stanu.
Wybierz pozycję Utwórz zasób, w polu Wyszukaj w witrynie Marketplace wpisz Azure Database Migration Service, a następnie naciśnij Enter.
Na stronie Azure Database Migration Service wybierz pozycję Utwórz.
Na stronie Tworzenie usługi Migration Service wprowadź następujące szczegóły, a następnie wybierz pozycję Dalej: Sieć>>.
Właściwości Wartość Wybieranie grupy zasobów migrate-mysql Nazwa usługi migracji adventureworks_migration_service Lokalizacja Wybierz najbliższą lokalizację Tryb usługi Azure Warstwa cenowa Premium z 4 rdzeniami wirtualnymi Na stronie Sieć wybierz sieć wirtualną MySQLvnet/mysqlvmSubnet. Ta sieć została utworzona w ramach konfiguracji.
Wybierz pozycję Przeglądanie i tworzenie, a następnie wybierz pozycję Utwórz. Zaczekaj na utworzenie usługi Database Migration Service. Operacja potrwa kilka minut.
W witrynie Azure Portal przejdź do strony usługi Database Migration Service.
Wybierz pozycję Nowy projekt migracji.
Na stronie Nowy projekt migracji wprowadź następujące szczegóły, a następnie wybierz pozycję Utwórz i uruchom działanie.
Właściwości Wartość Nazwa projektu adventureworks_migration_project Typ serwera źródłowego MySQL Docelowa baza danych dla mySQL Azure Database for MySQL Wybierz typ działania Migracja danych online Po uruchomieniu Kreatora migracji na stronie Wybierz źródło wprowadź następujące szczegóły.
Właściwości Wartość Nazwa serwera źródłowego nn.nn.nn.nn (adres IP maszyny wirtualnej platformy Azure z uruchomionym programem MySQL) Port serwera 3306 Nazwa użytkownika użytkownik_azure Hasło Pa55w.rd Wybierz pozycję Dalej: wybierz element docelowy>>.
Na stronie Wybierz element docelowy wprowadź następujące szczegóły.
Właściwości Wartość Nazwa serwera docelowego adventureworks[nnn]. MySQL.database.azure.com Nazwa użytkownika awadmin@adventureworks[nnn] Hasło Pa55w.rdDemo Wybierz pozycję Dalej: Wybierz bazy danych>>.
Na stronie Wybieranie baz danych upewnij się, że zarówno źródłowa baza danych, jak i docelowa baza danych są ustawione na adventureworks, a następnie wybierz pozycję Dalej: Skonfiguruj ustawienia migracji.
Na stronie Konfigurowanie ustawień migracji wybierz pozycję Dalej: Podsumowanie>>.
Na stronie Podsumowanie migracji w polu Nazwa działania wpisz AdventureWorks_Migration_Activity, a następnie wybierz pozycję Rozpocznij migrację.
Na stronie AdventureWorks_Migration_Activity wybierz pozycję Odśwież w 15-sekundowych odstępach czasu. W miarę postępu operacji migracji zobaczysz stan operacji migracji.
Poczekaj, aż kolumna SZCZEGÓŁY MIGRACJI zmieni się na Gotowe do przejścia jednorazowego.
Modyfikowanie danych i przełączanie jednorazowe do nowej bazy danych
Wróć do strony AdventureWorks_Migration_Activity w witrynie Azure Portal.
Wybierz bazę danych adventureworks.
Na stronie adventureworks sprawdź, czy stan wszystkich tabel jest oznaczony jako COMPLETED.
Wybierz pozycję Synchronizacja danych przyrostowych. Sprawdź, czy stan każdej tabeli jest oznaczony jako Synchronizacja.
Wróć do usługi Cloud Shell.
Uruchom następujące polecenie, aby nawiązać połączenie z bazą danych adventureworks uruchomioną przy użyciu programu MySQL na maszynie wirtualnej:
mysql -pPa55w.rd adventureworks
Wykonaj następujące instrukcje SQL, aby wyświetlić, a następnie usuń zamówienia 43659, 43660 i 43661 z bazy danych.
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);
Zamknij narzędzie mysql za pomocą polecenia quit.
Wróć do strony adventureworks w witrynie Azure Portal, a następnie wybierz pozycję Odśwież. Przewiń do strony tabel salesorderheader i salesorderdetail . Sprawdź, czy tabela salesorderheader wskazuje, że usunięto 3 wiersze, a 29 wierszy zostało usuniętych z tabeli sales.salesorderdetail . Jeśli nie zastosowano aktualizacji, sprawdź, czy istnieją oczekujące zmiany dla bazy danych.
Wybierz pozycję Rozpocznij migrację jednorazową.
Na stronie Zakończ migrację jednorazową wybierz pozycję Potwierdź, a następnie wybierz pozycję Zastosuj. Poczekaj, aż stan zmieni się na Ukończono.
Wróć do usługi Cloud Shell.
Uruchom następujące polecenie, aby nawiązać połączenie z bazą danych azureadventureworks uruchomioną przy użyciu usługi Azure Database for MySQL:
mysql -h adventureworks[nnn].MySQL.database.azure.com -u awadmin@adventureworks[nnn] -pPa55w.rdDemo adventureworks
Uruchom następujące instrukcje SQL, aby wyświetlić zamówienia i szczegóły zamówień 43659, 43660 i 43661. Celem tych zapytań jest pokazanie, że dane zostały przesłane:
SELECT * FROM salesorderheader WHERE salesorderid IN (43659, 43660, 43661); SELECT * FROM salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);
Pierwsze zapytanie powinno zwrócić 3 wiersze. Drugie zapytanie powinno zwrócić 29 wierszy.
Zamknij narzędzie mysql za pomocą polecenia quit.
Zamknij połączenie SSH za pomocą polecenia exit .
Czyszczenie utworzonych zasobów
Ważne
Jeśli wykonano te kroki we własnej subskrypcji osobistej, możesz usunąć zasoby pojedynczo lub usunąć grupę zasobów, aby usunąć cały zestaw zasobów. Uruchomione zasoby mogą generować koszty.
- Za pomocą usługi Cloud Shell uruchom następujące polecenie, aby usunąć grupę zasobów:
az group delete --name migrate-mysql