PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да архивирате и възстановите PostgreSQL база данни

В производствена среда, без значение колко голям или малък е вашият PostgreSQL база данни може да бъде, редовното връщане е съществен аспект от управлението на базата данни. В тази статия ще научите как да архивирате и възстановите PostgreSQL база данни.

Предполагаме, че вече имате работеща инсталация на системата за бази данни PostgreSQL. Ако не, прочетете следващите ни статии, за да инсталирате PostgreSQL във вашата Linux дистрибуция.

  • Как да инсталирате PostgreSQL и pgAdmin4 в Ubuntu 20.04
  • Как да инсталирате PostgreSQL и pgAdmin в CentOS 8
  • Как да инсталирате PostgreSQL и pgAdmin в RHEL 8

Да започнем...

Архивиране на една PostgreSQL база данни

PostgreSQL предоставя pg_dump помощна програма, която да ви помогне да архивирате бази данни. Той генерира файл на база данни с SQL команди във формат, който може лесно да бъде възстановен в бъдеще.

За архивиране, PostgreSQL база данни, започнете с влизане във вашия сървър на база данни, след което превключете към Postgres потребителски акаунт и стартирайте pg_dump както следва (заменете tecmintdb с името на базата данни, която искате да архивирате). По подразбиране изходният формат е обикновен текст на SQL скриптов файл.

$ pg_dump tecmintdb > tecmintdb.sql

pg_dump поддържа и други изходни формати. Можете да посочите изходния формат, като използвате -F опция, където c означава архивен файл с персонализиран формат, d означава архив с формат на директория и t означава архивен файл във формат tar:всички формати са подходящи за въвеждане в pg_restore .

Например:

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

За да изхвърлите изхода в изходния формат на директорията, използвайте -f флаг (който се използва за определяне на изходния файл), за да посочите целевата директория вместо файл. Директорията, която ще бъде създадена от pg_dump не трябва да съществува.

$ pg_dump -F d tecmintdb -f tecmintdumpdir	

За да архивирате всички PostgreSQL бази данни, използвайте pg_dumpall инструмент, както е показано.

$ pg_dumpall > all_pg_dbs.sql

Можете да възстановите дъмп с помощта на psql както е показано.

$ pgsql -f all_pg_dbs.sql postgres

Възстановяване на PostgreSQL база данни

За да възстановите PostgreSQL база данни, можете да използвате psql или pg_restore комунални услуги. psql се използва за възстановяване на текстови файлове, създадени от pg_dump докато pg_restore се използва за възстановяване на PostgreSQL база данни от архив, създаден от pg_dump в един от форматите, които не са обикновени текстови (по избор, tar или директория).

Ето пример за това как да възстановите дъмп на обикновен текстов файл:

$ psql tecmintdb < tecmintdb.sql

Както бе споменато по-горе, дъмпът в персонализиран формат не е скрипт за pgsql , така че трябва да бъде възстановен с pg_restore както е показано.

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

Архивиране на големи PostgreSQL бази данни

Ако базата данни, която архивирате, е голяма и искате да генерирате доста по-малък изходен файл, тогава можете да стартирате компресиран дъмп, където трябва да филтрирате изхода на pg_dump чрез инструмент за компресиране като gzip или някой от любимите ви:

$ pg_dump tecmintdb | gzip > tecmintdb.gz

Ако базата данни е изключително голяма, можете да изхвърлите паралелно, като изхвърлите брой_на_задачи таблици едновременно с помощта на -j флаг, както е показано.

$ pg_dump -F d -j 5 -f tecmintdumpdir

Важно е да се отбележи, че опцията за паралелно изхвърляне намалява времето за изхвърляне, но от друга страна също увеличава натоварването на сървъра на базата данни.

Архивиране на отдалечени PostgreSQL бази данни

pg_dump е обикновен PostgreSQL клиентски инструмент, поддържа операции на отдалечени сървъри на бази данни. За да посочите отдалечения сървър на база данни pg_dump трябва да се свържете, използвайте опциите на командния ред -h за да посочите отдалечения хост и -p определя отдалечения порт, който сървърът на базата данни слуша. Освен това използвайте -U флаг, за да посочите името на ролята на базата данни за свързване като.

Не забравяйте да замените 10.10.20.10 и5432 и tecmintdb с вашия отдалечен хост IP адрес или име на хост, порт на базата данни и име на база данни съответно.

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

Уверете се, че потребителят, който се свързва отдалечено, има необходимите привилегии за достъп до базата данни и подходящият метод за удостоверяване на базата данни е конфигуриран на сървъра на базата данни, в противен случай ще получите грешка като тази, показана на следващата екранна снимка.

Възможно е също така да изхвърляте база данни директно от един сървър на друг, използвайте pg_dump и psql помощни програми, както е показано.

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

Автоматично архивиране на PostgreSQL база данни с помощта на Cron задание

Можете да извършвате архивиране на редовни интервали с помощта на cron работни места. Cron заданията са често използвано средство за планиране на различни видове задачи за изпълнение на сървър.

Можете да конфигурирате задание на cron за автоматизиране на PostgreSQL архивиране на база данни, както следва. Имайте предвид, че трябва да изпълните следните команди като суперпотребител на PostgreSQL:

$ mkdir -p /srv/backups/databases

След това изпълнете следната команда, за да редактирате crontab, за да добавите ново задание за cron.

$ crontab -e

Копирайте и поставете следния ред в края на crontab. Можете да използвате всеки от форматите за изхвърляне, обяснени по-горе.

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

Запазете файла и излезте.

Услугата cron автоматично ще започне да изпълнява тази нова задача без рестартиране. И тази задача на cron ще се изпълнява всеки ден в полунощ, това е минимално решение на задачата за архивиране.

За повече информация как да планирате задания за cron, вижте:Как да създавате и управлявате Cron работни места в Linux

Това е за сега! Добра идея е да направите архивирането на данни част от рутината за управление на базата данни. За да се свържете с нас за въпроси или коментари, използвайте формата за обратна връзка по-долу. За повече информация вижте справочните страници pg_dump и 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. Слайдове за разговор:Подобрения в разделянето в PostgreSQL 11

  2. SQL - Комбиниране на множество подобни заявки

  3. PostgreSQL компресирани архивни регистрационни файлове в Windows

  4. Защо не мога да изключа зависими колони от „GROUP BY“, когато агрегирам по ключ?

  5. PostgreSQL:ФАТАЛНО - Удостоверяването на партньора не бе успешно за потребител (PG::ConnectionBad)