Резервное копирование 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