PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

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

W środowisku produkcyjnym, bez względu na to, jak duży lub mały jest Twój PostgreSQL może być baza danych, regularne powrót 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 masz już działającą instalację systemu bazodanowego PostgreSQL. Jeśli nie, przeczytaj nasze następujące artykuły, aby zainstalować PostgreSQL w twojej dystrybucji Linuksa.

  • Jak zainstalować PostgreSQL i pgAdmin4 w Ubuntu 20.04
  • Jak zainstalować PostgreSQL i pgAdmin w CentOS 8
  • Jak zainstalować PostgreSQL i pgAdmin w RHEL 8

Zacznijmy…

Utwórz kopię zapasową pojedynczej bazy danych PostgreSQL

PostgreSQL udostępnia pg_dump narzędzie ułatwiające tworzenie kopii zapasowych baz danych. Generuje plik bazy danych z poleceniami SQL w formacie, który można łatwo przywrócić w przyszłości.

Aby wykonać kopię zapasową, PostgreSQL bazy danych, zacznij od zalogowania się do serwera bazy danych, a następnie przełącz się na Postgres konto użytkownika i uruchom pg_dump w następujący sposób (zastąp tecmintdb z nazwą bazy danych, którą chcesz wykonać kopię zapasową). Domyślnie formatem wyjściowym jest zwykły tekstowy plik skryptu SQL.

$ pg_dump tecmintdb > tecmintdb.sql

pg_dump obsługuje również inne formaty wyjściowe. Możesz określić format wyjściowy za pomocą -F opcja, gdzie c oznacza plik archiwum w formacie niestandardowym, 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 katalogu wyjściowego, użyj -f flaga (która jest używana 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 wykonać kopię zapasową wszystkich PostgreSQL baz danych, użyj pg_dumpall narzędzie, jak pokazano.

$ pg_dumpall > all_pg_dbs.sql

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

$ pgsql -f all_pg_dbs.sql postgres

Przywracanie bazy danych PostgreSQL

Aby przywrócić PostgreSQL bazy danych, możesz użyć psql lub pg_restore narzędzia. 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 katalog).

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 pgsql , więc 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	

Tworzenie kopii zapasowych dużych baz danych PostgreSQL

Jeśli baza danych, której kopię zapasową tworzysz, jest duża i chcesz wygenerować dość mniejszy plik wyjściowy, możesz uruchomić skompresowany zrzut, w którym musisz filtrować 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 liczbę_zadań tabele jednocześnie przy użyciu -j flaga, 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.

Tworzenie kopii zapasowych zdalnych baz danych PostgreSQL

pg_dump to zwykłe narzędzie klienckie PostgreSQL, które obsługuje operacje na zdalnych serwerach baz danych. Aby określić zdalny serwer bazy danych pg_dump powinien się skontaktować, użyj opcji wiersza poleceń -h aby określić hosta zdalnego i -p określa port zdalny, na którym nasłuchuje serwer bazy danych. Poza tym użyj -U flaga, aby określić nazwę roli bazy danych, z którą chcesz się połączyć.

Pamiętaj, aby wymienić 10.10.20.10 i 5432 i tecmintdb z adresem IP zdalnego hosta lub nazwą 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 odpowiednia metoda uwierzytelniania bazy danych jest skonfigurowana na serwerze bazy danych, w przeciwnym razie otrzymasz błąd podobny do pokazanego na poniższym zrzucie ekranu.

Możliwe jest również zrzucenie bazy danych bezpośrednio z jednego serwera na drugi, użyj pg_dump i psql narzędzia, 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 za pomocą crona Oferty pracy. Cron zadania są powszechnie używanym sposobem planowania różnego rodzaju zadań uruchamianych na serwerze.

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

$ mkdir -p /srv/backups/databases

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

$ crontab -e

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

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

Zapisz plik i wyjdź.

Usługa cron automatycznie uruchomi to nowe zadanie bez restartu. A to zadanie cron będzie uruchamiane codziennie o północy, jest to minimalne rozwiązanie zadania kopii zapasowej.

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

Na razie to wszystko! Dobrym pomysłem jest, aby tworzenie kopii zapasowych danych stało się częścią procedury zarządzania bazą 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sparametryzowana PostgreSQL funkcja Order By / Limit w tabeli

  2. Posortować według kolumny ASC, ale najpierw wartości NULL?

  3. Funkcja PostgreSQL dla ostatnio wstawionego identyfikatora

  4. Zaktualizuj swoje hasło do PostgreSQL w systemie Linux

  5. Czy lepiej jest używać wielu baz danych z jednym schematem każda, czy jednej bazy danych z wieloma schematami?