В производствена среда, без значение колко голям или малък е вашият 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.