Автоматическое резервное копирование баз PostgreSQL

Есть удаленный доступ к серверы с базами данных PostgreSQL, надо делать их локальные дампы. Потом другой хост забирает данные по rsync и сам уже следит за удалением устаревших. Для MySQL работает хорошо. С Postgres’ом есть свои нюансы.
Чтобы не светить логины и пароли к базе при вызове команды pg_dump, они прописываются в специальном файлике ~/.pgpass:
#hostname:port:database:username:password
localhost:5432:database1:username1:strongpassword
localhost:5432:database2:username2:strongpassword

Права на файл:
$ chmod 600 ~/.pgpass

Вызов команд из crontab:
50 0 * * * /usr/bin/pg_dump --no-password -U username1 -h localhost database1 > /home/username/backup/database1.`date +\%Y-\%m-\%dT\%H:\%M:\%S`.pgsql
55 0 * * * /usr/bin/pg_dump --no-password -U username2 -h localhost database2 > /home/username/backup/database2.`date +\%Y-\%m-\%dT\%H:\%M:\%S`.pgsql

Если не указать хост, pg_dump выдаст ошибку и дамп создан не будет.

Бекап-сервер потом все забирает такой командой:
30 1 * * * /usr/bin/rsync -avz --remove-source-files -e "/usr/bin/ssh" username@server.domain.tld:backup/ /var/backup/server.db > /dev/null 2>&1

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

Полезная статья по резервному копированию и восстановлению PostgreSQL: “How To Backup PostgreSQL Databases on an Ubuntu VPS”

Leave a comment

Your comment