Резервное копирование PostgreSQL

Материал из База знаний
Перейти к: навигация, поиск

Резервное копирование PostgreSQL

Для того, чтобы сделать «элементарный» backup в postgresql нужно выполнить несколько команд. Итак, приступим :) Залогинимся под пользователем postgres

$ su - postgres

Посмотрим список баз данных

$ psql -l

Воспользуемся pg_dump — стандартной утилитой для создания резервных копий postgresql. Она имеет достаточно простой синтаксис

$ pg_dump databasename > outputfile

Например для базы данных databasename, это будет выглядеть так

$ pg_dump databasename > databasename.dump.out

Для того, чтобы dump занимал меньше места на диске, его лучше сжать

$ pg_dump databasename |gzip-c> databasename.dump.out.gz

Для восстановления (restore) достаточно выполнить

$ psql -d databasename -f databasename.dump.out

Есть еще весьма полезная команда, которая создает dump всех баз данных и помещает их в один файл $ pg_dumpall > all.dbs.out

Или же с компрессией на лету

$ pg_dumpall |gzip-c> all.dbs.out.gz

Можно это оформить в виде простенького скриптика для автоматизации процесса резервного копирования:

#!/bin/bash
#расположение директории с dump'ами
DIR="/backups/postgres"
mkdir -p $DIR
#путь к log файлу
LOG="/var/log/postgres_log.log"
touch$ LOGTIMENAME=`date +%d.%m.%Y-%H.%M`
db=`psql -l|sed-n4,/\eof/p |grep-v rows\)|grep-vE'template[0|1]'|awk{'print $1'}`
for n in $db; do
 TIMEDUMP=`date'+%T %x'`
 echo"backup and vacuum has been done at $TIMEDUMP : $TIMENAME on db: $n">>$LOG
 vacuumdb -z$n>/dev/null 2>&1
 pg_dump $n|gzip-c>"$DIR/psql-$n-$TIMENAME-db.dump.gz"
done

Ну и желательно добавить это в cron для выполнения бэкапа postgresql с определенной переодичностью

/path/backup_script >/dev/null 2>&1