Ć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 polecenia interfejsu wiersza polecenia platformy Azure w usłudze Cloud Shell, aby utworzyć maszynę wirtualną z uruchomioną bazą danych 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:
Właściwości 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 Password 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łączenie ion.
Na stronie zabezpieczeń Połączenie ion 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 ciąg [grupa zasobów] nazwą grupy zasobów określonej dla usługi:
az postgres flexible-server create \ --name azureadventureworks \ --resource-group migrate-postgresql
Jeś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 $SQLIP
Połączenie do starego serwera bazy danych przy użyciu protokołu SSH. Wprowadź wartość Pa55w.rdDemo jako hasło.
ssh azureuser@$SQLIP
Uruchom 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 adventureworks
Udziel uprawnień replikacji użytkownikowi azureuser:
ALTER ROLE azureuser REPLICATION;
Zamknij narzędzie psql za pomocą polecenia \q.
W wierszu polecenia powłoki 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. Należy pamiętać, że nazwa użytkownika ma sufiks @adventureworks[nnn]. W wierszu polecenia hasła wprowadź wartość Pa55w.rdDemo.
psql -h adventureworks[nnn].postgres.database.azure.com -U awadmin@adventureworks[nnn] -d postgres
Uruchom 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. Import jest wykonywany jako azureuser, więc po wyświetleniu monitu wprowadź hasło Pa55w.rd .
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -E -q -f adventureworks_schema.sql
Podczas 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 -t
Uruchom następujące polecenie: Skrypt createkeys.sql generuje inny skrypt SQL o nazwie addkeys.sql , który utworzy ponownie wszystkie klucze obce. Po przeprowadzeniu migracji bazy danych uruchomisz skrypt addkeys.sql :
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 -t
Uruchom skrypt dropkeys.sql:
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f dropkeys.sql
Zostanie wyświetlona seria komunikatów ALTER TABLE , ponieważ klucze obce są porzucane.
Ponownie Stat narzędzie psql i połącz się z bazą danych azureadventureworks .
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks
Uruchom 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 klawisz 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-postgresql Service name 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ą 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.
Właściwości 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>>.
Właściwości 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 Password Pa55w.rd Certyfikat serwera zaufania Wybrane Szyfruj połączenie Wybrane Na stronie Wybierz element docelowy wprowadź następujące szczegóły, a następnie wybierz pozycję Dalej: Wybierz bazy danych>>.
Właściwości Wartość Azure PostgreSQL adventureworks[nnn] Baza danych azureadventureworks Nazwa użytkownika azureuser@adventureworks[nnn] Password Pa55w.rd na stronie Wybieranie baz danych wybierz bazę danych adventureworks i zamapuj ją na azureadventureworks. Usuń zaznaczenie bazy 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 przejścia jednorazowego.
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.sql
Podczas 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.
Modyfikowanie danych i wycinanie 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 i czy wszystkie inne wartości to 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 adventureworks
Wykonaj 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 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 PostgreSQL:
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks
Hasło to Pa55w.rd.
Wykonaj następujące instrukcje SQL, aby wyświetlić zamówienia i szczegóły zamówienia w bazie danych. Zamknij 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. 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-postgresql