Ćwiczenie: migrowanie lokalnej bazy danych PostgreSQL do usługi Azure Database for PostgreSQL
W tym ćwiczeniu przeprowadzisz migrację bazy danych PostgreSQL na platformę Azure. Przeprowadzisz migrację istniejącej bazy danych PostgreSQL uruchomionej na maszynie wirtualnej do usługi Azure Database for PostgreSQL.
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 bazy danych PostgreSQL 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 komendy Azure CLI w usłudze Cloud Shell, aby utworzyć maszynę wirtualną działającą na PostgreSQL z kopią bazy danych AdventureWorks. Ostatnie polecenia będą wyświetlać adres IP nowej maszyny wirtualnej.
az account list-locations -o table
az group create \
--name migrate-postgresql \
--location <CHOOSE A LOCATION FROM ABOVE NEAR YOU>
az vm create \
--resource-group migrate-postgresql \
--name postgresqlvm \
--admin-username azureuser \
--admin-password Pa55w.rdDemo \
--image Ubuntu2204 \
--public-ip-address-allocation static \
--public-ip-sku Standard \
--vnet-name postgresqlvnet \
--nsg ""
az vm run-command invoke \
--resource-group migrate-postgresql \
--name postgresqlvm \
--command-id RunShellScript \
--scripts "
# Install PostgreSQL
sudo echo deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main > /etc/apt/sources.list.d/pgdg.list
sudo wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get -y update
sudo apt-get -y install postgresql-10
# Clone exercise code
sudo git clone https://github.com/MicrosoftLearning/DP-070-Migrate-Open-Source-Workloads-to-Azure.git /home/azureuser/workshop
# Configure PostgreSQL
sudo service postgresql stop
sudo bash << EOF
printf \"listen_addresses = '*'\nwal_level = logical\nmax_replication_slots = 5\nmax_wal_senders = 10\n\" >> /etc/postgresql/10/main/postgresql.conf
printf \"host all all 0.0.0.0/0 md5\n\" >> /etc/postgresql/10/main/pg_hba.conf
EOF
sudo service postgresql start
# Add the azureuser role and adventure works
sudo bash << EOF
su postgres << EOC
printf \"create role azureuser with login;alter role azureuser createdb;alter role azureuser password 'Pa55w.rd';alter role azureuser superuser;create database adventureworks;grant all privileges on database adventureworks to azureuser; \" | psql
EOC
EOF
PGPASSWORD=Pa55w.rd psql -h localhost -U azureuser adventureworks -E -q -f /home/azureuser/workshop/migration_samples/setup/postgresql/adventureworks/adventureworks.sql
"
az vm open-port \
--resource-group migrate-postgresql \
--name postgresqlvm \
--priority 200 \
--port '22'
az vm open-port \
--resource-group migrate-postgresql \
--name postgresqlvm \
--priority 300 \
--port '5432'
echo Setup Complete
SQLIP="$(az vm list-ip-addresses \
--resource-group migrate-postgresql \
--name postgresqlvm \
--query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
--output tsv)"
echo $SQLIP
Wykonanie tych poleceń potrwa około 5 minut. Nie musisz czekać, możesz kontynuować wykonywanie poniższych kroków.
Tworzenie serwera elastycznego usługi Azure Database for PostgreSQL
Za pomocą przeglądarki internetowej otwórz nową kartę i przejdź do witryny Azure Portal.
Na pasku wyszukiwania wpisz azure Database for PostgreSQL — serwery elastyczne.
Na stronie serwerów elastycznych usługi Azure Database for PostgreSQL wybierz pozycję + Utwórz.
Na stronie Serwer elastyczny wprowadź następujące szczegóły, a następnie wybierz pozycję Przejrzyj i utwórz:
Majątek Wartość Grupa zasobów migrate-postgresql Nazwa serwera adventureworksnnn, gdzie nnn jest sufiksem wyboru, aby nazwa serwera był unikatowy Lokalizacja Wybierz najbliższą lokalizację Wersja PostgreSQL 13 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 wcześniej serwerem PostgreSQL.
Wybierz pozycję Dodaj bieżący adres IP klienta, aby umożliwić maszynie klienckiej nawiązywanie połączenia z bazą 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 PostgreSQL. Zastąp ciąg [nnn] sufiksem użytym podczas tworzenia usługi Azure Database for PostgreSQL. Zastąp [grupa zasobów] nazwą grupy zasobów, którą określiłeś dla usługi:
az postgres flexible-server create \ --name azureadventureworks \ --resource-group migrate-postgresqlJeśli baza danych została utworzona pomyślnie, powinien zostać wyświetlony komunikat podobny do następującego:
{ "charset": "UTF8", "collation": "English_United States.1252", "name": "azureadventureworks", "resourceGroup": "migrate-postgresql", "type": "Microsoft.DBforPostgreSQL/servers/databases" }
Eksportowanie schematu do użycia w docelowej bazie danych
Teraz połączysz się z istniejącą maszyną wirtualną PostgreSQL przy użyciu usługi Cloud Shell w celu wyeksportowania schematu bazy danych.
Uruchom to polecenie interfejsu wiersza polecenia platformy Azure, aby wyświetlić adres IP istniejącej maszyny wirtualnej.
SQLIP="$(az vm list-ip-addresses \ --resource-group migrate-postgresql \ --name postgresqlvm \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $SQLIPPołącz się ze starym serwerem bazy danych przy użyciu protokołu SSH. Wprowadź Pa55w.rdDemo jako hasło.
ssh azureuser@$SQLIPUruchom następujące polecenie, aby nawiązać połączenie z bazą danych na maszynie wirtualnej. Hasło użytkownika azureuser na serwerze PostgreSQL uruchomionym na maszynie wirtualnej to Pa55w.rd:
psql adventureworksUdziel uprawnień replikacji użytkownikowi azureuser:
ALTER ROLE azureuser REPLICATION;Zamknij narzędzie psql za pomocą polecenia \q .
W terminalu bash uruchom następujące polecenie, aby wyeksportować schemat bazy danych adventureworks do pliku o nazwie adventureworks_schema.sql
pg_dump -o -d adventureworks -s > adventureworks_schema.sql
Importowanie schematu do docelowej bazy danych
Uruchom następujące polecenie, aby nawiązać połączenie z serwerem azureadventureworks[nnn]. Zastąp dwa wystąpienia elementu [nnn] sufiksem usługi. Pamiętaj, że nazwa użytkownika ma sufiks @adventureworks[nnn]. Przy zapytaniu o hasło wprowadź Pa55w.rdDemo.
psql -h adventureworks[nnn].postgres.database.azure.com -U awadmin@adventureworks[nnn] -d postgresUruchom następujące polecenia, aby utworzyć użytkownika o nazwie azureuser i ustawić hasło dla tego użytkownika na Pa55w.rd. Trzecia instrukcja daje użytkownikowi azureuser niezbędne uprawnienia do tworzenia obiektów i zarządzania nimi w bazie danych azureadventureworks . Rola azure_pg_admin umożliwia użytkownikowi azureuser instalowanie i używanie rozszerzeń w bazie danych.
CREATE ROLE azureuser WITH LOGIN; ALTER ROLE azureuser PASSWORD 'Pa55w.rd'; GRANT ALL PRIVILEGES ON DATABASE azureadventureworks TO azureuser; GRANT azure_pg_admin TO azureuser;Zamknij narzędzie psql za pomocą polecenia \q .
Zaimportuj schemat bazy danych adventureworks do bazy danych azureadventureworks uruchomionej w usłudze Azure Database for PostgreSQL. Importujesz jako azureuser, więc gdy zostaniesz poproszony, wprowadź hasło Pa55w.rd.
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -E -q -f adventureworks_schema.sqlPodczas tworzenia każdego elementu zostanie wyświetlona seria komunikatów. Skrypt powinien zostać ukończony bez żadnych błędów.
Uruchom następujące polecenie. Skrypt findkeys.sql generuje inny skrypt SQL o nazwie dropkeys.sql , który spowoduje usunięcie wszystkich kluczy obcych z tabel w bazie danych azureadventureworks . Wkrótce uruchomisz skrypt dropkeys.sql :
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f workshop/migration_samples/setup/postgresql/adventureworks/findkeys.sql -o dropkeys.sql -tUruchom następujące polecenie. Skrypt createkeys.sql generuje inny skrypt SQL o nazwie addkeys.sql , który utworzy ponownie wszystkie klucze obce. Skrypt addkeys.sql zostanie uruchomiony po przeprowadzeniu migracji bazy danych:
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f workshop/migration_samples/setup/postgresql/adventureworks/createkeys.sql -o addkeys.sql -tUruchom skrypt dropkeys.sql :
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f dropkeys.sqlWyświetli się seria komunikatów ALTER TABLE o usuwaniu kluczy obcych.
Uruchom ponownie narzędzie psql i połącz się z bazą danych azureadventureworks.
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworksUruchom następujące zapytanie, aby znaleźć szczegóły pozostałych kluczy obcych:
SELECT constraint_type, table_schema, table_name, constraint_name FROM information_schema.table_constraints WHERE constraint_type = 'FOREIGN KEY';To zapytanie powinno zwrócić pusty zestaw wyników. Jeśli jednak jakiekolwiek klucze obce nadal istnieją, dla każdego klucza obcego uruchom następujące polecenie:
ALTER TABLE [table_schema].[table_name] DROP CONSTRAINT [constraint_name];Po usunięciu pozostałych kluczy obcych wykonaj następującą instrukcję SQL, aby wyświetlić wyzwalacze w bazie danych:
SELECT trigger_name FROM information_schema.triggers;To zapytanie powinno również zwrócić pusty zestaw wyników wskazujący, że baza danych nie zawiera żadnych wyzwalaczy. Jeśli baza danych zawierała wyzwalacze, należy je wyłączyć przed migracją danych i ponownie je włączyć później.
Zamknij narzędzie psql za pomocą polecenia \q .
Przeprowadzanie migracji online przy użyciu usługi Database Migration Service
Wróć do witryny Azure Portal.
Wybierz pozycję Wszystkie usługi, wybierz pozycję Subskrypcje, a następnie wybierz subskrypcję.
Na stronie subskrypcji w obszarze Ustawienia wybierz pozycję Dostawcy zasobów.
W polu Filtruj według nazwy wpisz DataMigration, a następnie wybierz pozycję Microsoft.DataMigration.
Jeśli wartość Microsoft.DataMigration nie jest zarejestrowana, wybierz pozycję Zarejestruj i poczekaj na zmianę stanu na Zarejestrowano. Może być konieczne wybranie pozycji Odśwież , aby zobaczyć 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ć>>.
Majątek Wartość Wybieranie grupy zasobów migrate-postgresql Nazwa usługi adventureworks_migration_service Lokalizacja Wybierz najbliższą lokalizację Tryb serwisowy Błękit Próg cenowy Premium z 4 rdzeniami wirtualnymi Na stronie Sieć wybierz sieć wirtualną postgresqlvnet/posgresqlvmSubnet . 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.
Po utworzeniu usługi wybierz pozycję Przejdź do zasobu.
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.
Majątek Wartość Nazwa projektu adventureworks_migration_project Typ serwera źródłowego PostgreSQL Docelowa baza danych postgreSQL Azure Database for PostgreSQL Wybierz typ działania Migracja danych online Po uruchomieniu Kreatora migracji na stronie Wybierz źródło wprowadź następujące szczegóły, a następnie wybierz pozycję Dalej: Wybierz element docelowy>>.
Majątek Wartość Nazwa serwera źródłowego nn.nn.nn.nn (adres IP maszyny wirtualnej platformy Azure z uruchomionym programem PostgreSQL) Port serwera 5432 Baza danych adventureworks Nazwa użytkownika azureuser Hasło Pa55w.rd Ufaj certyfikatowi serwera Wybrano Szyfruj połączenie Wybrano Na stronie Wybierz element docelowy wprowadź następujące szczegóły, a następnie wybierz pozycję Dalej: Wybierz bazy danych>>.
Majątek Wartość Azure PostgreSQL adventureworks[nnn] Baza danych azureadventureworks Nazwa użytkownika azureuser@adventureworks[nnn] Hasło Pa55w.rd na stronie Wybieranie baz danych wybierz bazę danych adventureworks i zamapuj ją na azureadventureworks. Odznacz bazę danych postgres. Wybierz pozycję Dalej: wybierz tabele>>.
Na stronie Wybieranie tabel wybierz pozycję Dalej: Skonfiguruj ustawienia>> migracji.
Na stronie Konfigurowanie ustawień migracji rozwiń listę rozwijaną Adventureworks , rozwiń listę rozwijaną Zaawansowane ustawienia migracji online, sprawdź, czy maksymalna liczba wystąpień do załadowania równoległego wynosi 5, a następnie wybierz pozycję Dalej: Podsumowanie>>.
Na stronie Podsumowanie 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. Stan operacji migracji będzie widoczny podczas jej postępu. Poczekaj, aż kolumna SZCZEGÓŁY MIGRACJI zmieni się na Gotowe do przełączenia.
Wróć do usługi Cloud Shell.
Uruchom następujące polecenie, aby ponownie utworzyć klucze obce w bazie danych azureadventureworks . Wcześniej wygenerowano skrypt addkeys.sql :
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f addkeys.sqlPodczas dodawania kluczy obcych zostanie wyświetlona seria instrukcji ALTER TABLE . Może zostać wyświetlony błąd dotyczący tabeli SpecialOfferProduct , którą na razie można zignorować. Jest to spowodowane ograniczeniem UNIKATOWYm, które nie jest poprawnie przenoszone. W świecie rzeczywistym należy pobrać szczegóły tego ograniczenia ze źródłowej bazy danych przy użyciu następującego zapytania:
SELECT constraint_type, table_schema, table_name, constraint_name FROM information_schema.table_constraints WHERE constraint_type = 'UNIQUE';Następnie można ręcznie przywrócić to ograniczenie w docelowej bazie danych w usłudze Azure Database for PostgreSQL.
Nie powinno istnieć żadne inne błędy.
Modyfikuj dane i przejdź do nowej bazy danych
Wróć do strony AdventureWorks_Migration_Activity w witrynie Azure Portal.
Wybierz bazę danych adventureworks .
Na stronie adventureworks sprawdź, czy wartość Ukończono pełne ładowanie wynosi 66 oraz czy wszystkie pozostałe wartości wynoszą 0.
Wróć do usługi Cloud Shell.
Uruchom następujące polecenie, aby nawiązać połączenie z bazą danych adventureworks uruchomioną przy użyciu bazy danych PostgreSQL na maszynie wirtualnej:
psql adventureworksWykonaj następujące instrukcje SQL, aby wyświetlić, a następnie usuń zamówienia 43659, 43660 i 43661 z bazy danych. Pamiętaj, że baza danych implementuje kaskadowe usuwanie w tabeli salesorderheader , która automatycznie usuwa odpowiednie wiersze z tabeli salesorderdetail .
SELECT * FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661); SELECT * FROM sales.salesorderdetail WHERE salesorderid IN (43659, 43660, 43661); DELETE FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661);Zamknij narzędzie psql za pomocą polecenia \q .
Wróć do strony adventureworks w witrynie Azure Portal i wybierz pozycję Odśwież. Sprawdź, czy zastosowano 32 zmiany.
Wybierz Rozpocznij przełączanie.
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 PostgreSQL:
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworksHasło to Pa55w.rd.
Wykonaj następujące instrukcje SQL, aby wyświetlić zamówienia i szczegóły zamówienia w bazie danych. Przerwij po pierwszej stronie każdej tabeli. Celem tych zapytań jest pokazanie, że dane zostały przesłane:
SELECT * FROM sales.salesorderheader; SELECT * FROM sales.salesorderdetail;Uruchom następujące instrukcje SQL, aby wyświetlić zamówienia i szczegóły zamówień 43659, 43660 i 43661.
SELECT * FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661); SELECT * FROM sales.salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);Oba zapytania powinny zwracać 0 wierszy.
Zamknij narzędzie psql za pomocą polecenia \q .
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. Zasoby pozostawione w stanie aktywnym mogą generować koszty.
- Za pomocą usługi Cloud Shell uruchom następujące polecenie, aby usunąć grupę zasobów:
az group delete --name migrate-postgresql