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.