Скрипт бэкапа для PostgreSQL
- Python 3.x
- psql, pg_dump, pg_dumpall
- ~/.pgpass (опционально)
Выполняет бэкапы всех БД + глобальные объекты (global objects - роли и табличные пространства).
Формат дампа - directory-format (man pg_dump), что позволяет выполнять дамп в несколько потоков (njobs).
Сам скрипт размещен на GitHub
./pg_backup.py --help
Скрипт запускается по cron'у:
/etc/cron.d/backup
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin PYTHONIOENCODING=utf8 MAILTO=root ### PostgreSQL on local 0 1 * * * postgres OUTPUT=$(pg_backup.py --path '/mnt/nfs.storage/backup/postgres' 2>&1) || echo "${OUTPUT}" ### PostgreSQL in docker 0 1 * * * root OUTPUT=$(docker exec -i -u postgres pgdb_pgdb_1 /mnt/nfs.storage/scripts/pg_backup.py --path '/mnt/nfs.storage/backup/postgres' 2>&1) || echo "${OUTPUT}"
Очистка, 5 последних удачных бэкапов:
/etc/cron.d/backup
### PostgreSQL cleanup 0 9 * * * root find /mnt/nfs.storage/backup/postgres/ -maxdepth 1 -type d -name '????.??.??_??????' | sort -r | awk 'FNR>5 {print}' | xargs -r rm -rf
Обсуждение