NetTOOLSLib home page


GoРезервное копирование и восстановление баз данных PostgreSQL

Данная статья рассказывает о процедуре резервно копирования и восстановления баз данных PostgreSQL.
Все примеры создавались на базе операционной системы Linux CentOS 7 и PostgreSQL 9.

Резервное копирование SQL Dump

pg_dump - клиентская утилита PostgreSQL. Утилита создает файл с набором SQL команд, которые используются для восстанбвления данных.

Пример использования:


#pg_dump dbname > backupfile



pg_dump выполняет операции с любым сервером, к которому есть доступ, но следует помнить, что специальных прав на доступ у утилиты нет, т.е. она будет выполнять резервное копирование только тех данных к которым есть доступ у пользователя, который использует утилиту.
т.е. чтобы не пропустить копирование важных данных, надо убедиться что вы обладаете достаточными правами доступа.

Для подключения к удаленному серверу есть возможность указывать имя сервера и порт подключения


#pg_dump -h server -p port > backupfile



можно с помощью переменных окружения PGHOST и PGPORT указывать сервер и порт по умолчанию.

Для подключения к PostgreSQL под сторонним пользователем можно использовать вариант команды,
где username - имя пользователя, потребуется ввод его пароля


#pg_dump -U username -W > backupfile



pg_dump не блокирует операции над базой данных в процессе работы.


Восстановления данных из резервной копии

Файл бэкапа, созданный pg_dump считывается psql программой и затем последовательно выполняется.


#psql dbname < backupfile



backupfile - имя файла бакапа созданного pg_dump. База данных при этом самостоятельно не создается и требуется отдельная операции по предварительному созданию базы данных.

Пример команды создания базы данных


#createdb -T template0 dbname



template0 - имя шаблона базы данных
dbname - имя создаваемой базы данных

до начала процесса восстановления требуется создание всех пользователей PostgreSQL, которым были предоставлены права на восстанавливаемую базу иначе не будет предоставлены правильные права на объекты.

При выполнении восстановления базы данны, по умолчанию, в случае офибки в процесс работы процесс не будет прерываться
Данная команда будет прерывать процесс восстановления в случае возникновения ошибки.


#psql --set ON_ERROR_STOP=on dbname < backupfile



В таком случам получаем частично восстановленную базу и прерванный процесс восстановление.

В качестве альтернативного варианта использовать процедуру восстановления как единую транзакцию. В таком режиме в случает возникновения проблемм произойдет откат транзакции и состоянии базы вернется к прежнему варианту.
для использования данного метода используем опцию:


--single-transaction



В создания копии базы на другом сервер возможен совместный вариант использования команд pg_dump и psql.
Например:


#pg_dump -h server1 dbname | psql -h server2 dbname



В данной команде используется один и тот же шаблон базы template0, что провлияет на процесс восстановления если на server2 использован другой шаблон, например template1.


Для одновременного копирования всех баз данных с сервера используется команда pg_dumpall


#pg_dumpall < allbackupfile



Для восстановления данных используется команда:


#psql -f allbackupfile postgres



Для резервного копирования баз данных большого объема возможно сразу архиваровать получаемый файл


#pg_dump dbname | gzip > filename.gz



Восстановление данных в таком случае будет осуществлять команда:


#gunzip -c filename.gz | psql dbname



или


#cat filename.gz | gunzip | psql dbname



Команда резервного копирования, при выполнении которой, формируется файл спецального формата, в отличии от способов представленных выше


#pg_dump -Fc dbname > filename



Для восстановления резервной копии из файла специального формата требуется друга команда:


#pg_restore -d dbname filename




Резервное копирование баз данных используя возможсти файловой системы


Алтернативный вариант резервного копирования - копирование файлов баз данных на уровне файловой системы.

Пример команды:


#tar -cf backup.tar /usr/local/pgsql/data



Для копирование файлов требуется остановка сервера PostgreSQL, в противном случае скопировать файлы не удастся. Т.е. придется прерывать работу пользовательских системы для выполнения резервного копирования.

Восстановление из бэкапа также потребует остановки сервера PostgreSQL.

В данной статье рассмотрены процедуры выполнения резервного копирования и восстановления баз данных PostgreSQL.

Go


NetTOOLSLib home page
(online network tools and utilities)