Migrowanie bazy danych PostgreSQL przy użyciu zrzutu i przywracania
DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny
Możesz użyć narzędzia pg_dump, aby wyodrębnić bazę danych PostgreSQL do pliku zrzutu. Metoda przywracania bazy danych zależy od formatu wybranego zrzutu. Jeśli zrzut jest pobierany ze zwykłym formatem (jest to domyślny -Fp
format , więc nie trzeba określać określonej opcji), jedyną opcją przywrócenia jest użycie narzędzia psql, ponieważ generuje plik w postaci zwykłego tekstu. W przypadku pozostałych trzech metod zrzutu: niestandardowe, katalogowe i tar należy użyć pg_restore .
Ważne
Instrukcje i polecenia podane w tym artykule są przeznaczone do wykonywania w terminalach powłoki bash. Obejmuje to środowiska, takie jak Podsystem Windows dla systemu Linux (WSL), Azure Cloud Shell i inne interfejsy zgodne z powłoką bash. Upewnij się, że używasz terminalu powłoki bash, aby wykonać kroki i wykonać polecenia opisane w tym przewodniku. Użycie innego typu środowiska terminalu lub powłoki może spowodować różnice w zachowaniu poleceń i nie mogą spowodować zamierzonych wyników.
W tym artykule skoncentrujemy się na zwykłych (domyślnych) formatach katalogów. Format katalogu jest przydatny, ponieważ umożliwia użycie wielu rdzeni do przetwarzania, co może znacznie zwiększyć wydajność, zwłaszcza w przypadku dużych baz danych.
Witryna Azure Portal usprawnia ten proces za pośrednictwem bloku Połącz, oferując wstępnie skonfigurowane polecenia dostosowane do serwera z wartościami zastąpionymi danymi użytkownika. Należy pamiętać, że blok Połącz jest dostępny tylko dla usługi Azure Database for PostgreSQL — serwer elastyczny, a nie dla pojedynczego serwera. Oto jak można użyć tej funkcji:
Uzyskaj dostęp do witryny Azure Portal: najpierw przejdź do witryny Azure Portal i wybierz blok Połącz.
Wybierz bazę danych: w bloku Połącz znajdziesz listę rozwijaną baz danych. Wybierz bazę danych, z której chcesz wykonać zrzut.
Wybierz odpowiednią metodę: w zależności od rozmiaru bazy danych można wybrać między dwiema metodami:
pg_dump
&psql
- przy użyciu pojedynczego pliku tekstowego: Idealne dla mniejszych baz danych, ta opcja korzysta z pojedynczego pliku tekstowego dla procesu zrzutu i przywracania.pg_dump
&pg_restore
— przy użyciu wielu rdzeni: w przypadku większych baz danych ta metoda jest wydajniejsza, ponieważ używa wielu rdzeni do obsługi procesu zrzutu i przywracania.
Polecenia kopiowania i wklejania: portal udostępnia gotowe do użycia
pg_dump
polecenia i lubpsql
pg_restore
. Te polecenia są już zastępowane wartościami zgodnie z wybranym serwerem i bazą danych. Skopiuj i wklej te polecenia.
Wymagania wstępne
Jeśli używasz pojedynczego serwera lub nie masz dostępu do portalu serwera elastycznego, przeczytaj tę stronę dokumentacji. Zawiera on informacje podobne do przedstawionych w bloku Łączenie dla serwera elastycznego w portalu.
Uwaga
Ze względu pg_dump
na to, że wszystkie programy , pg_restore
psql
i pg_dumpall
korzystają z biblioteki libpq, można użyć dowolnych obsługiwanych zmiennych środowiskowych, które oferuje, lub użyć pliku hasła, aby uniknąć monitowania o hasło za każdym razem, gdy uruchamiasz dowolne z tych poleceń.
Aby przejść przez ten przewodnik z instrukcjami, potrzebne są następujące elementy:
- Serwer usługi Azure Database for PostgreSQL, w tym reguły zapory umożliwiające dostęp.
- pg_dump, psql, pg_restore i pg_dumpall na wypadek, gdy chcesz przeprowadzić migrację z rolami i uprawnieniami, zainstalowane narzędzia wiersza polecenia.
- Zdecyduj o lokalizacji zrzutu: wybierz miejsce, z którego chcesz wykonać zrzut. Można to zrobić z różnych lokalizacji, takich jak oddzielna maszyna wirtualna, cloud shell (gdzie narzędzia wiersza polecenia są już zainstalowane, ale może nie być w odpowiedniej wersji, więc zawsze sprawdzaj wersję przy użyciu, na przykład
psql --version
), lub własnego laptopa. Zawsze należy pamiętać o odległości i opóźnieniu między serwerem PostgreSQL a lokalizacją, z której uruchamiasz zrzut lub przywracanie.
Ważne
Niezbędne jest użycie pg_dump
narzędzi , psql
pg_restore
i pg_dumpall
, które są albo w tej samej wersji głównej, czy nowszej wersji głównej niż serwer bazy danych, z którego eksportujesz dane lub do którego importujesz dane. Nie można tego zrobić, może spowodować niepowodzenie migracji danych. Jeśli serwer docelowy ma wyższą wersję główną niż serwer źródłowy, użyj narzędzi, które są tej samej wersji głównej lub nowszej niż serwer docelowy.
Uwaga
Należy pamiętać, że pg_dump
można eksportować tylko jedną bazę danych naraz. To ograniczenie ma zastosowanie niezależnie od wybranej metody, niezależnie od tego, czy używa pojedynczego pliku, czy wielu rdzeni.
Dumping użytkowników i ról z pg_dumpall -r
pg_dump
Służy do wyodrębniania bazy danych PostgreSQL do pliku zrzutu. Jednak ważne jest, aby zrozumieć, że pg_dump
nie powoduje zrzutu ról ani definicji użytkowników, ponieważ są one uważane za obiekty globalne w środowisku PostgreSQL. Aby przeprowadzić kompleksową migrację, w tym użytkowników i ról, należy użyć polecenia pg_dumpall -r
.
To polecenie umożliwia przechwycenie wszystkich informacji o rolach i użytkownikach ze środowiska PostgreSQL. Jeśli przeprowadzasz migrację w bazach danych na tym samym serwerze, możesz pominąć ten krok i przejść do sekcji Tworzenie nowej bazy danych .
pg_dumpall -r -h <server name> -U <user name> > roles.sql
Jeśli na przykład masz serwer o nazwie i użytkownik o nazwie mydemoserver
myuser
uruchom następujące polecenie:
pg_dumpall -r -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql
Jeśli używasz pojedynczego serwera, nazwa użytkownika zawiera składnik nazwy serwera. W związku z tym myuser
zamiast polecenia należy użyć polecenia myuser@mydemoserver
.
Dumping role z serwera elastycznego
W środowisku serwera elastycznego zwiększone środki zabezpieczeń oznaczają, że użytkownicy nie mają dostępu do tabeli pg_authid, gdzie są przechowywane hasła ról. To ograniczenie wpływa na sposób wykonywania zrzutu ról, ponieważ standardowe pg_dumpall -r
polecenie próbuje uzyskać dostęp do tej tabeli dla haseł i kończy się niepowodzeniem z powodu braku uprawnień.
W przypadku dumpingu ról z serwera elastycznego kluczowe jest uwzględnienie --no-role-passwords
opcji w poleceniu pg_dumpall
. Ta opcja uniemożliwia pg_dumpall
próbę uzyskania dostępu pg_authid
do tabeli, której nie można odczytać z powodu ograniczeń zabezpieczeń.
Aby pomyślnie zrzucić role z serwera elastycznego, użyj następującego polecenia:
pg_dumpall -r --no-role-passwords -h <server name> -U <user name> > roles.sql
Jeśli na przykład masz serwer o nazwie , użytkownik o nazwie mydemoserver
myuser
, uruchom następujące polecenie:
pg_dumpall -r --no-role-passwords -h mydemoserver.postgres.database.azure.com -U myuser > roles.sql
Czyszczenie zrzutu ról
Podczas migracji pliku roles.sql
wyjściowego mogą zawierać pewne role i atrybuty, które nie mają zastosowania lub są dopuszczalne w nowym środowisku. Oto, co należy wziąć pod uwagę:
Usuwanie atrybutów, które można ustawić tylko przez superużytkowników: w przypadku migracji do środowiska, w którym nie masz uprawnień administratora, usuń atrybuty, takie jak
NOSUPERUSER
iNOBYPASSRLS
z zrzutu ról.Wykluczanie użytkowników specyficznych dla usługi: wyklucz użytkowników usługi pojedynczego serwera, takich jak
azure_superuser
lubazure_pg_admin
. Są one specyficzne dla usługi i zostaną utworzone automatycznie w nowym środowisku.
Użyj następującego sed
polecenia, aby wyczyścić zrzut ról:
sed -i '/azure_superuser/d; /azure_pg_admin/d; /azuresu/d; /^CREATE ROLE replication/d; /^ALTER ROLE replication/d; /^ALTER ROLE/ {s/NOSUPERUSER//; s/NOBYPASSRLS//;}' roles.sql
To polecenie usuwa wiersze zawierające azure_superuser
, , azure_pg_admin
azuresu
, wiersze rozpoczynające się od CREATE ROLE replication
i ALTER ROLE replication
, i usuwa NOSUPERUSER
atrybuty i NOBYPASSRLS
z ALTER ROLE
instrukcji .
Tworzenie pliku zrzutu zawierającego dane do załadowania
Aby wyeksportować istniejącą bazę danych PostgreSQL lokalnie lub na maszynie wirtualnej do pliku skryptu sql, uruchom następujące polecenie w istniejącym środowisku:
- pg_dump i psql — używanie pojedynczego pliku tekstowego
- pg_dump i pg_restore — przy użyciu wielu rdzeni
pg_dump <database name> -h <server name> -U <user name> > <database name>_dump.sql
Jeśli na przykład masz serwer o nazwie , użytkownik o mydemoserver
nazwie i bazie danych o nazwie myuser
testdb
, uruchom następujące polecenie:
pg_dump testdb -h mydemoserver.postgres.database.azure.com -U myuser > testdb_dump.sql
Jeśli używasz pojedynczego serwera, nazwa użytkownika zawiera składnik nazwy serwera. W związku z tym myuser
zamiast polecenia należy użyć polecenia myuser@mydemoserver
.
Przywracanie danych do docelowej bazy danych
Przywracanie ról i użytkowników
Przed przywróceniem obiektów bazy danych upewnij się, że role zostały prawidłowo po cenach dumpingowych i oczyszczone. Jeśli migrujesz w bazach danych na tym samym serwerze, zarówno dumping role, jak i ich przywracanie może nie być konieczne. Jednak w przypadku migracji między różnymi serwerami lub środowiskami ten krok ma kluczowe znaczenie.
Aby przywrócić role i użytkowników do docelowej bazy danych, użyj następującego polecenia:
psql -f roles.sql -h <server_name> -U <user_name>
Zastąp <server_name>
ciąg nazwą serwera docelowego i <user_name>
nazwą użytkownika. To polecenie używa psql
narzędzia do wykonywania poleceń SQL zawartych w roles.sql
pliku, skutecznie przywracając role i użytkowników do docelowej bazy danych.
Jeśli na przykład masz serwer o nazwie , użytkownik o nazwie mydemoserver
myuser
, uruchom następujące polecenie:
psql -f roles.sql -h mydemoserver.postgres.database.azure.com -U myuser
Jeśli używasz pojedynczego serwera, nazwa użytkownika zawiera składnik nazwy serwera. W związku z tym myuser
zamiast polecenia należy użyć polecenia myuser@mydemoserver
.
Uwaga
Jeśli masz już użytkowników o tych samych nazwach na pojedynczym serwerze lub serwerze lokalnym, z którego przeprowadzasz migrację, oraz na serwerze docelowym, pamiętaj, że ten proces przywracania może zmienić hasła dla tych ról. W związku z tym wszelkie kolejne polecenia, które należy wykonać, mogą wymagać zaktualizowanych haseł. Nie ma to zastosowania, jeśli serwer źródłowy jest serwerem elastycznym, ponieważ serwer elastyczny nie zezwala na dumping haseł dla użytkowników z powodu zwiększonych środków bezpieczeństwa.
Tworzenie nowej bazy danych
Przed przywróceniem bazy danych może być konieczne utworzenie nowej, pustej bazy danych. Aby to zrobić, użytkownik, którego używasz, musi mieć CREATEDB
uprawnienie. Poniżej przedstawiono dwie często używane metody:
Za pomocą
createdb
narzędzia Programcreatedb
umożliwia tworzenie bazy danych bezpośrednio z poziomu wiersza polecenia powłoki bash bez konieczności logowania się do bazy danych PostgreSQL lub opuszczania środowiska systemu operacyjnego. Przykład:createdb <new database name> -h <server name> -U <user name>
Jeśli na przykład masz serwer o nazwie , użytkownik o nazwie
mydemoserver
myuser
i nowa baza danych, którą chcesz utworzyć, totestdb_copy
, uruchom następujące polecenie:createdb testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser
Jeśli używasz pojedynczego serwera, nazwa użytkownika zawiera składnik nazwy serwera. W związku z tym
myuser
zamiast polecenia należy użyć poleceniamyuser@mydemoserver
.Za pomocą polecenia SQL Aby utworzyć bazę danych przy użyciu polecenia SQL, musisz nawiązać połączenie z serwerem PostgreSQL za pośrednictwem interfejsu wiersza polecenia lub narzędzia do zarządzania bazami danych. Po nawiązaniu połączenia możesz użyć następującego polecenia SQL, aby utworzyć nową bazę danych:
CREATE DATABASE <new database name>;
Zastąp <new database name>
ciąg nazwą, którą chcesz nadać nowej bazie danych. Aby na przykład utworzyć bazę danych o nazwie testdb_copy
, polecenie to:
CREATE DATABASE testdb_copy;
Przywracanie zrzutu
Po utworzeniu docelowej bazy danych można przywrócić dane do tej bazy danych z pliku zrzutu. Podczas przywracania zarejestruj wszelkie błędy w errors.log
pliku i sprawdź jego zawartość pod kątem błędów po zakończeniu przywracania.
- pg_dump i psql — używanie pojedynczego pliku tekstowego
- pg_dump i pg_restore — przy użyciu wielu rdzeni
psql -f <database name>_dump.sql <new database name> -h <server name> -U <user name> 2> errors.log
Jeśli na przykład masz serwer o nazwie , użytkownik o nazwie mydemoserver
i nową bazę danych o nazwie myuser
testdb_copy
, uruchom następujące polecenie:
psql -f testdb_dump.sql testdb_copy -h mydemoserver.postgres.database.azure.com -U myuser 2> errors.log
Sprawdzanie po przywróceniu
Po zakończeniu procesu przywracania należy przejrzeć errors.log
plik pod kątem błędów, które mogły wystąpić. Ten krok ma kluczowe znaczenie dla zapewnienia integralności i kompletności przywróconych danych. Rozwiąż wszelkie problemy znalezione w pliku dziennika, aby zachować niezawodność bazy danych.
Optymalizowanie procesu migracji
Podczas pracy z dużymi bazami danych proces zrzutu i przywracania może być długi i może wymagać optymalizacji w celu zapewnienia wydajności i niezawodności. Ważne jest, aby pamiętać o różnych czynnikach, które mogą mieć wpływ na wydajność tych operacji i podjąć kroki w celu ich optymalizacji.
Aby uzyskać szczegółowe wskazówki dotyczące optymalizowania procesu zrzutu i przywracania, zapoznaj się z artykułem Najlepsze rozwiązania dotyczące pg_dump i pg_restore . Ten zasób zawiera kompleksowe informacje i strategie, które mogą być korzystne dla obsługi dużych baz danych.
Następne kroki
- Najlepsze rozwiązania dotyczące pg_dump i pg_restore.
- Aby uzyskać więcej informacji na temat migrowania baz danych do usługi Azure Database for PostgreSQL, zobacz Przewodnik po migracji bazy danych.