Wyszukiwanie w witrynie

Jak wykonać kopię zapasową i przywrócić bazę danych PostgreSQL


W środowisku produkcyjnym, niezależnie od wielkości bazy danych PostgreSQL, regularne tworzenie kopii zapasowych jest istotnym aspektem zarządzania bazą danych. W tym artykule dowiesz się, jak wykonać kopię zapasową i przywrócić bazę danych PostgreSQL.

Zakładamy, że posiadasz już działającą instalację systemu bazodanowego PostgreSQL. Jeśli nie, przeczytaj nasze poniższe artykuły, aby zainstalować PostgreSQL w swojej dystrybucji Linuksa.

Zacznijmy…

Utwórz kopię zapasową pojedynczej bazy danych PostgreSQL

PostgreSQL udostępnia narzędzie pg_dump, które pomaga w tworzeniu kopii zapasowych baz danych. Generuje plik bazy danych z poleceniami SQL w formacie, który można łatwo odtworzyć w przyszłości.

Aby utworzyć kopię zapasową bazy danych PostgreSQL, zacznij od zalogowania się na serwer bazy danych, następnie przełącz się na konto użytkownika Postgres i uruchom pg_dump w następujący sposób (zamień tecmintdb na nazwę bazy danych, której kopię zapasową chcesz utworzyć). Domyślnie formatem wyjściowym jest plik skryptu SQL w postaci zwykłego tekstu.

pg_dump tecmintdb > tecmintdb.sql

pg_dump obsługuje także inne formaty wyjściowe. Możesz określić format wyjściowy za pomocą opcji -F, gdzie c oznacza plik archiwum w niestandardowym formacie, d oznacza archiwum w formacie katalogu, a t oznacza plik archiwum w formacie tar: wszystkie formaty nadają się do wprowadzenia do pg_restore.

Na przykład:

pg_dump -F c tecmintdb > tecmintdb.dump
OR
pg_dump -F t tecmintdb > tecmintdb.tar

Aby zrzucić dane wyjściowe w formacie wyjściowym katalogu, użyj flagi -f (która służy do określenia pliku wyjściowego), aby określić katalog docelowy zamiast pliku. Katalog, który zostanie utworzony przez pg_dump, nie może istnieć.

pg_dump -F d tecmintdb -f tecmintdumpdir	

Aby utworzyć kopię zapasową wszystkich baz danych PostgreSQL, użyj narzędzia pg_dumpall, jak pokazano.

pg_dumpall > all_pg_dbs.sql

Możesz przywrócić zrzut za pomocą psql, jak pokazano.

psql -f all_pg_dbs.sql postgres

Przywracanie bazy danych PostgreSQL

Aby przywrócić bazę danych PostgreSQL, możesz użyć narzędzi psql lub pg_restore. psql służy do przywracania plików tekstowych utworzonych przez pg_dump, podczas gdy pg_restore służy do przywracania bazy danych PostgreSQL z archiwum utworzonego przez pg_dump< w jednym z formatów innych niż zwykły tekst (niestandardowy, tar lub katalogowy).

Oto przykład przywracania zrzutu zwykłego pliku tekstowego:

psql tecmintdb < tecmintdb.sql

Jak wspomniano powyżej, zrzut w niestandardowym formacie nie jest skryptem dla psql, dlatego należy go przywrócić za pomocą pg_restore, jak pokazano.

pg_restore -d tecmintdb tecmintdb.dump
OR
pg_restore -d tecmintdb tecmintdb.tar
OR
pg_restore -d tecmintdb tecmintdumpdir	

Skompresowana kopia zapasowa bazy danych PostgreSQL

Jeśli baza danych, której kopię zapasową tworzysz, jest duża i chcesz wygenerować stosunkowo mniejszy plik wyjściowy, możesz uruchomić skompresowany zrzut, w którym musisz przefiltrować dane wyjściowe pg_dump za pomocą narzędzia do kompresji, takiego jak gzip lub którykolwiek z twoich ulubionych:

pg_dump tecmintdb | gzip > tecmintdb.gz

Jeśli baza danych jest bardzo duża, możesz zrzucić równolegle, zrzucając jednocześnie tabele number_of_jobs, używając flagi -j, jak pokazano.

pg_dump -F d -j 5 -f tecmintdumpdir

Należy zauważyć, że opcja zrzutu równoległego skraca czas zrzutu, ale z drugiej strony zwiększa również obciążenie serwera bazy danych.

Utwórz kopię zapasową zdalnych baz danych PostgreSQL

pg_dump to zwykłe narzędzie klienta PostgreSQL, obsługujące operacje na zdalnych serwerach baz danych. Aby określić zdalny serwer bazy danych, z którym ma się kontaktować pg_dump, użyj opcji wiersza poleceń -h, aby określić zdalnego hosta, a -p określ zdalnego hosta port, na którym nasłuchuje serwer bazy danych. Poza tym użyj flagi -U, aby określić nazwę roli bazy danych, z którą chcesz się połączyć.

Pamiętaj, aby zastąpić 10.10.20.10 i 5432 oraz tecmintdb odpowiednio adresem IP lub nazwą hosta zdalnego hosta, portem bazy danych i nazwą bazy danych.

pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

Upewnij się, że użytkownik łączący się zdalnie ma wymagane uprawnienia dostępu do bazy danych, a na serwerze bazy danych jest skonfigurowana odpowiednia metoda uwierzytelniania bazy danych, w przeciwnym razie pojawi się błąd podobny do pokazanego na poniższym zrzucie ekranu.

Możliwe jest także zrzucenie bazy danych bezpośrednio z jednego serwera na drugi. Użyj narzędzi pg_dump i psql, jak pokazano.

pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

Automatyczna kopia zapasowa bazy danych PostgreSQL przy użyciu zadania Cron

Możesz wykonywać kopie zapasowe w regularnych odstępach czasu, korzystając z zadań cron. Zadania Cron są powszechnie używanym sposobem planowania różnego rodzaju zadań uruchamianych na serwerze.

Możesz skonfigurować zadanie cron, aby zautomatyzować tworzenie kopii zapasowych bazy danych PostgreSQL w następujący sposób. Pamiętaj, że jako superużytkownik PostgreSQL musisz uruchomić następujące polecenia:

mkdir -p /srv/backups/databases

Następnie uruchom następujące polecenie, aby edytować plik crontab i dodać nowe zadanie cron.

crontab -e

Skopiuj i wklej następujący wiersz na końcu pliku crontab. Możesz użyć dowolnego z formatów zrzutu opisanych powyżej.

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

Zapisz plik i wyjdź.

Usługa cron automatycznie rozpocznie uruchamianie tego nowego zadania bez ponownego uruchamiania. To zadanie cron będzie uruchamiane codziennie o północy, jest to minimalne rozwiązanie zadania tworzenia kopii zapasowej.

Aby uzyskać więcej informacji na temat planowania zadań Cron, zobacz: Jak tworzyć zadania Cron i zarządzać nimi w systemie Linux

To wszystko na teraz! Dobrym pomysłem jest włączenie tworzenia kopii zapasowych danych do rutynowego zarządzania bazami danych. Aby skontaktować się z nami w przypadku jakichkolwiek pytań lub komentarzy, skorzystaj z poniższego formularza opinii. Aby uzyskać więcej informacji, zobacz strony referencyjne pg_dump i pg_restore.