Migrowanie lokalnej bazy danych PostgreSQL na platformę Azure
Gdy firma podejmie decyzję o przejściu do usługi Azure Database for PostgreSQL, następnym krokiem jest zaplanowanie migracji lokalnych baz danych i wybranie narzędzi do przenoszenia danych.
Po zapoznaniu się ze sposobem obsługi i skalowania bazy danych PostgreSQL na platformie Azure w usłudze Azure Database for PostgreSQL warto teraz rozważyć sposób migrowania istniejących lokalnych baz danych.
W tej lekcji dowiesz się, jak utworzyć wystąpienie usługi Azure Database for PostgreSQL przy użyciu witryny Azure Portal. Jeśli musisz utworzyć wiele wystąpień tej usługi, możesz utworzyć skrypt procesu przy użyciu interfejsu wiersza polecenia platformy Azure.
Tworzenie elastycznych serwerów usługi Azure Database for PostgreSQL
W witrynie Azure Portal wpisz serwer elastyczny usługi Azure Database for PostgreSQL w polu wyszukiwania i wybierz pozycję Serwery elastyczne usługi Azure Database for PostgreSQL.
Wybierz pozycję Utwórz w bloku głównym serwera elastycznego, wprowadź szczegóły usługi. Te szczegóły obejmują następujące elementy:
Grupa zasobów. Grupa zasobów dla serwera.
Nazwa serwera. Musi być unikatową nazwą z zakresu od 3 do 63 znaków, zawierającą tylko małe litery, cyfry i łączniki.
Region. Region serwera.
Wersja bazy danych PostgreSQL: wybierz wersję odpowiadającą migrowaniu lokalnej bazy danych.
Typ obciążenia. Wybierz opcję na podstawie obciążenia.
-
- Środowisko obliczeniowe i magazyn Wybierz pozycję Konfiguruj serwer , aby ustawić warstwę cenową i określić wymagane zasoby dla usługi. Opcje zostały omówione w lekcji 1. Pamiętaj, że jeśli wybierzesz warstwy cenowe Ogólnego przeznaczenia lub Zoptymalizowane pod kątem pamięci, możesz skalować w górę i w dół liczbę rdzeni procesora wirtualnego później. Nie można jednak zmniejszyć ilości miejsca do magazynowania — może on być zwiększany tylko po utworzeniu serwera.
Nazwa użytkownika administratora: Nazwa konta użytkownika, które zostanie utworzone z uprawnieniami administracyjnymi. Platforma Azure tworzy niektóre konta do użytku własnego. Nie można użyć azure_superuser, azure_pg_admin, administratora, administratora, katalogu głównego, gościa, publicznej ani nazwy rozpoczynającej się od pg_.
Hasło. Musi zawierać od 8 do 128 znaków. Musi zawierać kombinację wielkich i małych liter, cyfr i znaków innych niż alfanumeryczne.
Kliknij pozycję Przejrzyj i utwórz , aby wdrożyć usługę. Wdrożenie potrwa kilka minut.
Po wdrożeniu usługi wybierz opcję Zabezpieczenia połączenia i dodaj odpowiednie reguły zapory, aby umożliwić klientom nawiązywanie połączenia, zgodnie z opisem w temacie Łączność klienta w lekcji 1. Należy również wybrać opcję Zezwalaj na dostęp do usług platformy Azure.
Tworzenie wystąpienia usługi Azure Database for PostgreSQL przy użyciu interfejsu wiersza polecenia platformy Azure
Możesz utworzyć wystąpienie usługi Azure Database for PostgreSQL przy użyciu az postgres flexible-server create
polecenia . W poniższej instrukcji przedstawiono przykład tworzenia wystąpienia serwera elastycznego. Większość parametrów jest objaśniająca, z wyjątkiem następujących:
- sku-name. Tworzy się to na podstawie kombinacji warstwy cenowej (B dla warstwy Podstawowa, GP dla warstwy Ogólnego przeznaczenia i MO dla zoptymalizowanej pod kątem pamięci), generacji obliczeniowej (Gen4 lub Gen5) oraz liczby rdzeni procesorów wirtualnych. W poniższym przykładzie serwer jest tworzony przy użyciu warstwy cenowej Ogólnego przeznaczenia z 4 rdzeniami procesora CPU generacji Gen5.
- rozmiar magazynu. Jest to wymagana ilość miejsca na dysku określona w megabajtach. Poniższy przykład przydziela 10 gigabajtów:
az postgres flexible-server create \ --location northeurope --resource-group testGroup \ --name testserver --admin-user username --admin-password password \ --sku-name Standard_B1ms --tier Burstable --public-access 153.24.26.117 --storage-size 128 \ --tags "key=value" --version 13 --high-availability Enabled --zone 1 \ --standby-zone 3
Przeprowadzanie migracji online
Migrację online z lokalnej instalacji postgreSQL do usługi Azure Database for PostgreSQL można przeprowadzić za pomocą usługi Azure Database for PostgreSQL za pomocą usługi Azure Database Migration Service.
W scenariuszu online usługa Azure Database Migration Service kopiuje wszystkie istniejące dane na platformę Azure, a następnie stale wykonuje operację synchronizacji ze źródłowej bazy danych. Wszystkie nowe transakcje wykonywane względem systemu lokalnego są kopiowane do nowej bazy danych na platformie Azure. Ten proces będzie kontynuowany do momentu ponownego skonfigurowania aplikacji klienckich do korzystania z nowej bazy danych na platformie Azure, w którym to momencie zakończysz operację synchronizacji.
Konfigurowanie serwera źródłowego i eksportowanie schematu
Pierwszym krokiem przeprowadzania migracji online jest przygotowanie serwera źródłowego do obsługi pełnego rejestrowania z wyprzedzeniem zapisu. Na serwerze źródłowym zmodyfikuj plik postgresql.config i skonfiguruj następujące parametry rejestrowania z wyprzedzeniem zapisu. Aby zmienić te parametry, należy ponownie uruchomić serwer — należy to zrobić tylko wtedy, gdy oczekuje się, że system będzie w stanie spoczynku:
wal_level = logical
max_replication_slots = 5
max_wal_senders = 10
Po ponownym uruchomieniu serwera wyeksportuj schemat źródłowej bazy danych przy użyciu narzędzia pg_dump:
pg_dump -o -h [server host] -U [user name] -d [database name] -s > db_schema.sql
Na koniec utwórz listę wszystkich rozszerzeń używanych przez bazę danych. Należy włączyć te rozszerzenia w docelowej bazie danych. W tym celu użyj polecenia \dx plsql lub uruchom następujące zapytanie:
SELECT *
FROM pg_extension;
Tworzenie docelowej bazy danych i importowanie schematu
Następnym etapem jest utworzenie docelowej bazy danych w usłudze Azure Database for PostgreSQL. Możesz użyć znanego narzędzia, takiego jak pgAdmin, aby nawiązać połączenie z serwerem, lub możesz użyć interfejsu wiersza polecenia platformy Azure w poniższym przykładzie:
az postgres db create \
--name [database name] \
--server-name [server name] \
--resource-group [azure resource group]
W docelowej bazie danych włącz wszystkie rozszerzenia używane przez bazę danych źródeł.
Zaimportuj schemat do docelowej bazy danych. Na maszynie przechowującej plik db_schema.sql uruchom następujące polecenie:
psql -h [Azure Database for PostgreSQL host] -U [user name] -d [database name] -f db_schema.sql
Usuń wszystkie odwołania do klucza obcego w docelowej bazie danych. Ten krok jest potrzebny, ponieważ dane nie muszą być migrowane w żadnej konkretnej sekwencji, co może spowodować niepowodzenie procesu migracji. Może to spowodować niepowodzenie procesu migracji. Należy jednak utworzyć rekord wszystkich kluczy obcych, ponieważ będzie trzeba je ponownie utworzyć później. Uruchom następującą instrukcję SQL przy użyciu narzędzia psql, aby znaleźć wszystkie klucze obce w bazie danych i wygenerować skrypt, który je usuwa:
SELECT Queries.tablename
,concat('alter table ', Queries.tablename, ' ', STRING_AGG(concat('DROP CONSTRAINT ', Queries.foreignkey), ',')) as DropQuery
,concat('alter table ', Queries.tablename, ' ',
STRING_AGG(concat('ADD CONSTRAINT ', Queries.foreignkey, ' FOREIGN KEY (', column_name, ')', 'REFERENCES ', foreign_table_name, '(', foreign_column_name, ')' ), ',')) as AddQuery
FROM
(SELECT
tc.table_schema,
tc.constraint_name as foreignkey,
tc.table_name as tableName,
kcu.column_name,
ccu.table_schema AS foreign_table_schema,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM
information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
AND tc.table_schema = kcu.table_schema
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
AND ccu.table_schema = tc.table_schema
WHERE constraint_type = 'FOREIGN KEY') Queries
GROUP BY Queries.tablename;
Wyłącz wszystkie wyzwalacze w docelowej bazie danych — istnieją dwa powody:
- Pomaga to zoptymalizować proces migracji w miarę kopiowania danych.
- Wyzwalacze są często używane do implementowania złożonych form integralności referencyjnej, a ze względów opisanych wcześniej tego typu sprawdzanie integralności może zakończyć się niepowodzeniem podczas przesyłania danych. Użyj następującej instrukcji SQL, aby znaleźć wszystkie wyzwalacze w bazie danych i wygenerować skrypt, który je wyłącza:
SELECT concat ('alter table ', event_object_table, ' disable trigger ', trigger_name) FROM information_schema.triggers;
Uwaga
Tekst wyzwalacza można znaleźć przy użyciu polecenia \df+ w narzędziu psql.
Tworzenie wystąpienia usługi Azure Database Migration Service
W witrynie Azure Portal możesz teraz utworzyć wystąpienie usługi Azure Database Migration Service.
Przed utworzeniem wystąpienia usługi Azure Database Migration Service należy zarejestrować dostawcę zasobów Microsoft.DataMigration w ramach subskrypcji. Można to zrobić w następujący sposób:
- Na pasku menu po lewej stronie witryny Azure Portal wybierz pozycję Wszystkie usługi.
- Na stronie Wszystkie usługi wybierz pozycję Subskrypcje.
- Na stronie Subskrypcje wybierz swoją 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.
- Wybierz pozycję Zarejestruj i poczekaj na zmianę stanu na Zarejestrowano. Może być konieczne wybranie pozycji Odśwież , aby zobaczyć, który stan ma zostać zmieniony.
Po zarejestrowaniu dostawcy zasobów możesz utworzyć usługę. Wybierz polecenie Utwórz zasób na pasku menu po lewej stronie i wyszukaj pozycję Azure Database Migration Service.
Na stronie Tworzenie usługi Migracja wprowadź nazwę wystąpienia usługi, określ subskrypcję — powinna to być ta sama subskrypcja, względem której zarejestrowano dostawcę zasobów — grupę zasobów i lokalizację. Należy również podać sieć wirtualną, ponieważ usługa Database Migration Service zależy od zapory utworzonej dla tej sieci wirtualnej w celu zapewnienia niezbędnej ochrony. Jeśli migrujesz bazy danych z maszyn wirtualnych platformy Azure, możesz umieścić usługę Database Migration Service w tej samej sieci wirtualnej używanej przez te maszyny wirtualne. Warstwa cenowa określa liczbę rdzeni procesora wirtualnego, które są dostępne dla usługi. Jeśli chcesz przeprowadzić migrację online, musisz wybrać warstwę Premium . Warstwa Standardowa obsługuje tylko migrację w trybie offline.
Przed kontynuowaniem poczekaj na wdrożenie usługi. Ta operacja potrwa kilka minut.
Tworzenie projektu migracji przy użyciu usługi Database Migration Service
Teraz możesz użyć wystąpienia usługi Database Migration Service do przeprowadzenia migracji online. W tym celu utworzysz nowy projekt Database Migration. Przejdź do strony wystąpienia usługi migracji i wybierz pozycję Nowy projekt migracji.
Na stronie Nowy projekt migracji ustaw typ serwera źródłowego na PostgreSQL, ustaw typ serwera docelowego na Azure Database for PostgreSQL, a następnie wybierz pozycję Migracja danych online. Na stronie Typ działania wymieniono kroki, które należy wykonać na serwerze źródłowym, aby włączyć migrację online. Tekst w dolnej części strony Nowy projekt migracji opisuje proces migracji schematu do obiektu docelowego.
Sprawdź, czy zostały wykonane te kroki, a następnie wybierz pozycję Utwórz i uruchom działanie.
Tworzenie i uruchamianie działania migracji
Nowy projekt migracji uruchamia kreatora, który przeprowadzi Cię przez proces. Podaj następujące szczegóły:
- Na stronie Dodawanie szczegółów źródła adres serwera źródłowego, źródłowej bazy danych i konto, które może połączyć się z tą bazą danych i pobrać dane. Aby przeprowadzić migrację, konto musi mieć uprawnienia ADMINISTRATORA .
- Na stronie Szczegóły elementu docelowego określ adres usługi Azure Database for PostgreSQL, bazę danych, do której chcesz przeprowadzić migrację danych, oraz szczegóły konta z uprawnieniami administracyjnymi.
- Na stronie Mapuj na docelowe bazy danych wybierz źródłową bazę danych i docelową bazę danych. Można migrować pojedynczą bazę danych lub wiele baz danych.
- Na stronie Ustawienia migracji określ wszelkie dodatkowe ustawienia, które chcesz skonfigurować, takie jak maksymalna liczba tabel do równoległego ładowania.
- Na stronie Podsumowanie migracji wprowadź nazwę działania, a następnie wybierz pozycję Uruchom migrację.
Zostanie wyświetlona strona stanu działania przedstawiająca postęp migracji oraz wszelkie błędy, które wystąpiły. Jeśli migracja zakończy się niepowodzeniem, należy rozwiązać problemy i ponowić próbę działania. Jeśli przeprowadzasz migrację w trybie online, stan zmieni się na Gotowe do migracji jednorazowej po przesłaniu istniejących danych. Jednak działanie nadal działa, aby przenieść wszelkie dodatkowe zmiany, które pojawiają się, gdy aplikacje nadal aktywnie korzystają z oryginalnej bazy danych.
Przywracanie kluczy obcych i wyzwalaczy
W tym momencie przesłano dane, a aplikacje mogą zacząć z niego korzystać. Przed migracją danych należy ponownie utworzyć klucze obce, które zostały usunięte, i przywrócić wszystkie wyzwalacze. Jeśli niektóre aplikacje są nadal połączone z oryginalną bazą danych, rejestrowanie z wyprzedzeniem gwarantuje, że docelowa baza danych na platformie Azure jest aktualna. Rejestrowanie z wyprzedzeniem nie będzie miało negatywnego wpływu na klucze obce i wyzwalacze.
Przecięcie do nowej bazy danych
Po przełączeniu wszystkich aplikacji do nowej bazy danych ukończysz proces migracji i przejdziesz do nowej bazy danych. Na stronie stan działania wybierz nazwę migrowanej bazy danych, aby wyświetlić podsumowanie wykonanej pracy.
Wybierz pozycję Rozpocznij migrację jednorazową. Zostanie wyświetlona strona z prośbą o potwierdzenie zakończenia operacji. W tym momencie wszystkie pozostałe wpisy z dziennika z wyprzedzeniem zapisu dla źródłowej bazy danych zostaną opróżnione, a aktualizacje zostaną zatrzymane. Wszelkie dalsze zmiany wprowadzone w źródłowej bazie danych nie zostaną rozpropagowane.
Przeprowadzanie migracji w trybie offline
Migracja w trybie offline wykonuje "migawkę" źródłowej bazy danych w określonym punkcie w czasie i kopiuje te dane do docelowej bazy danych. Wszelkie zmiany wprowadzone w danych źródłowych po utworzeniu migawki nie zostaną odzwierciedlone w docelowej bazie danych.
Masz co najmniej dwie opcje, jeśli chcesz przeprowadzić migrację w trybie offline do usługi Azure Database for PostgreSQL lub do serwera PostgreSQL działającego gdzie indziej, takiego jak maszyna wirtualna platformy Azure:
- Wyeksportuj schemat i dane ze źródłowej bazy danych przy użyciu narzędzia pg_dump, a następnie zaimportuj schemat i dane do docelowej bazy danych przy użyciu narzędzia psql. Ta technika umożliwia modyfikowanie, ponowne formatowanie i czyszczenie schematu i danych w razie potrzeby przed przesłaniem ich do docelowej bazy danych.
- Ponownie zrzuć dane ze źródłowej bazy danych przy użyciu pg_dump i przywróć dane do docelowej bazy danych przy użyciu pg_restore. Ta technika jest szybsza niż używanie eksportu i importu, ale dane są po cenach dumpingowych w formacie, którego nie można łatwo zmienić. Użyj tego podejścia, jeśli nie musisz dostosowywać schematu ani danych.
Uwaga
Obecnie nie można użyć usługi Azure Database Migration Service do przeprowadzenia migracji bazy danych PostgreSQL w trybie offline.
Migrowanie przy użyciu eksportu i importowania
Wykonaj następujące kroki, aby przeprowadzić migrację bazy danych przy użyciu metody eksportowania i importowania.
Wyeksportuj schemat przy użyciu polecenia pg_dump z poziomu wiersza polecenia powłoki bash:
pg_dump -o -h [source database server] -U [user name] -d [database] -s > db_schema.sql
Wyeksportuj dane do innego pliku za pomocą polecenia pg_dump:
pg_dump -o -h [source database server] -U [user name] -d [database] -a > db_data.sql
W tym momencie db_schema.sql i db_data.sql to skrypty SQL, które można modyfikować przy użyciu edytora tekstów.
Utwórz docelową bazę danych w usłudze Azure Database for PostgreSQL. Możesz to zrobić za pomocą interfejsu wiersza polecenia platformy Azure:
az postgres db create \ --name [database name] \ --server-name [server name] \ --resource-group [azure resource group]
Zaimportuj schemat do docelowej bazy danych za pomocą polecenia psql:
psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_schema.sql
Zaimportuj dane do docelowej bazy danych za pomocą polecenia psql:
psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_data.sql
Migrowanie przy użyciu kopii zapasowej i przywracania
W tych krokach opisano proces migracji bazy danych przy użyciu kopii zapasowej i przywracania.
Utwórz kopię zapasową bazy danych — w wierszu polecenia powłoki bash uruchom następujące polecenie. Określ nazwę użytkownika, który ma uprawnienia niezbędne do utworzenia kopii zapasowej bazy danych:
pg_dump [database name] -h [source database server] -U [user name] -Fc > database_backup.bak
Utwórz docelową bazę danych w usłudze Azure Database for PostgreSQL:
az postgres db create \ --name [database name] \ --server-name [server name] \ --resource-group [azure resource group] \
Przywróć kopię zapasową do nowej bazy danych za pomocą polecenia pg_restore z poziomu wiersza polecenia powłoki bash. Określ nazwę użytkownika z uprawnieniami administracyjnymi w usłudze Azure Database for PostgreSQL:
pg_restore -d [target database name] -h [server name in Azure Database for PostgreSQL] -Fc -U [user name] database_backup.bak