Ćwiczenie: migrowanie lokalnej bazy danych MySQL do usługi Azure Database for MySQL

Ukończone

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.

  1. Za pomocą przeglądarki internetowej otwórz nową kartę i przejdź do witryny Azure Portal.

  2. Wybierz pozycję + Utwórz zasób.

  3. W polu Wyszukaj w witrynie Marketplace wpisz Azure Database for MySQL i naciśnij klawisz Enter.

  4. Na stronie Azure Database for MySQL wybierz pozycję Utwórz.

  5. Na stronie Wybieranie opcji wdrażania usługi Azure Database for MySQL w obszarze Serwer elastyczny wybierz pozycję Utwórz.

  6. 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
  7. Na stronie Przeglądanie i tworzenie wybierz pozycję Utwórz. Przed kontynuowaniem poczekaj na utworzenie usługi.

  8. Po utworzeniu usługi wybierz pozycję Przejdź do zasobu.

  9. Wybierz pozycję Zabezpieczenia Połączenie ion.

  10. Na stronie zabezpieczeń Połączenie ion ustaw opcję Zezwalaj na dostęp do usług platformy Azure na wartość Tak.

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

  12. Wybierz pozycję Dodaj bieżący adres IP klienta, aby umożliwić maszynie klienckiej dostęp do bazy danych.

  13. Zapisz i poczekaj na zaktualizowanie reguł zapory.

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

  1. 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
    
  2. Połączenie do starego serwera bazy danych przy użyciu protokołu SSH. Wprowadź wartość Pa55w.rdDemo jako hasło.

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

  1. 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
    
  2. 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';
    
  3. Uruchom następujące polecenia, aby utworzyć bazę danych adventureworks .

    CREATE DATABASE adventureworks;
    
  4. Zamknij narzędzie mysql za pomocą polecenia quit .

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

  1. Wróć do witryny Azure Portal.

  2. Kliknij pozycję Wszystkie usługi, kliknij pozycję Subskrypcje, a następnie kliknij swoją subskrypcję.

  3. Na stronie subskrypcji w obszarze Ustawienia kliknij pozycję Dostawcy zasobów.

  4. W polu Filtruj według nazwy wpisz DataMigration, a następnie kliknij pozycję Microsoft.DataMigration.

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

  6. Wybierz pozycję Utwórz zasób, w polu Wyszukaj w witrynie Marketplace wpisz Azure Database Migration Service, a następnie naciśnij klawisz Enter.

  7. Na stronie Azure Database Migration Service wybierz pozycję Utwórz.

  8. 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
  9. Na stronie Sieć wybierz sieć wirtualną MySQLvnet/mysqlvmSubnet. Ta sieć została utworzona w ramach konfiguracji.

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

  11. W witrynie Azure Portal przejdź do strony usługi Database Migration Service.

  12. Wybierz pozycję Nowy projekt migracji.

  13. 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
  14. 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
  15. Wybierz pozycję Dalej: wybierz element docelowy>>.

  16. 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
  17. Wybierz pozycję Dalej: Wybierz bazy danych>>.

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

  19. Na stronie Konfigurowanie ustawień migracji wybierz pozycję Dalej: Podsumowanie>>.

  20. Na stronie Podsumowanie migracji w polu Nazwa działania wpisz AdventureWorks_Migration_Activity, a następnie wybierz pozycję Rozpocznij migrację.

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

  22. Poczekaj, aż kolumna SZCZEGÓŁY MIGRACJI zmieni się na Gotowe do przejścia jednorazowego.

Modyfikowanie danych i przełączanie jednorazowe do nowej bazy danych

  1. Wróć do strony AdventureWorks_Migration_Activity w witrynie Azure Portal.

  2. Wybierz bazę danych adventureworks.

  3. Na stronie adventureworks sprawdź, czy stan wszystkich tabel jest oznaczony jako COMPLETED.

  4. Wybierz pozycję Synchronizacja danych przyrostowych. Sprawdź, czy stan każdej tabeli jest oznaczony jako Synchronizacja.

  5. Wróć do usługi Cloud Shell.

  6. 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
    
  7. 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);
    
  8. Zamknij narzędzie mysql za pomocą polecenia quit.

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

  10. Wybierz pozycję Rozpocznij migrację jednorazową.

  11. Na stronie Zakończ migrację jednorazową wybierz pozycję Potwierdź, a następnie wybierz pozycję Zastosuj. Poczekaj, aż stan zmieni się na Ukończono.

  12. Wróć do usługi Cloud Shell.

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

  15. Zamknij narzędzie mysql za pomocą polecenia quit.

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

  1. Za pomocą usługi Cloud Shell uruchom następujące polecenie, aby usunąć grupę zasobów:
az group delete --name migrate-mysql