Swift хранилище — удобная штука. Не надо поддерживать сервер для бэкапа, думать о занятом там пространстве, да и дешево — платишь ровно столько, сколько используешь. Собственно, если у Вас сервер в датацентре, который предоставляет услугу облачного хранилища swift — вам повезло.
Будем использовать утилиту python-swiftclient она стабильная и развивается, в отличии от cloudfuse .
Скрипт создаёт архив с паролем (переменная PASSWORD) и делает простейшую ротацию, количество хранимых копий задается в переменной LIMIT. Переменной CONTAINER надо присвоить имя контейнера, в который будут складываться архивы. Так же требуется указать данные для аутентификации в swift. Не забудьте, что на сервере должно быть место для создания архива. Может понадобится дописать условие, в котором будет проверяться свободное место.
#!/bin/bash
DATE="`date +%F_%T`"
BK_file=backup-$DATE.gz.gpg
#Custom variables
PASSWORD=12345
LIMIT=20
CONTAINER=pg-backup
#Swift auth
export ST_AUTH=https://url-swift
export ST_USER=user
export ST_KEY=password
echo "Start local backup"
pg_dump -c -h localhost -U test test | gzip | gpg -c --passphrase $PASSWORD > $BK_file;
echo "Local backup done"
echo "Swift upload"
swift upload -S 5368709120 $CONTAINER $BK_file
rm -rf $BK_file
echo "Local backup remove"
list=(`swift list $CONTAINER`)
#the number of elements in the array
quantity=${#list[@]}
echo 'Start rotate'
n=1
echo "Fixed limit: $LIMIT"
echo 'Delete files:'
for ((i=$quantity-1; i>=0; i--));
do
if [ $n -gt $LIMIT ]
then
swift delete $CONTAINER ${list[i]}
fi
n=$(($n+1))
done
echo 'Rotate done'
Для использования по cron нужно добавить пароль базы в pgpass.conf , а он должен лежать в директории home пользователя, от имени которого производится бэкап.
Кстати, у дата-центра, который я использовал, стоит ограничение на один файл в размере 5ГБ, поэтому нужно пользоваться сегментированием, параметр -s 5368709120 (5ГБ по международному стандарту) указывает по сколько байт делить большие файлы.
Мой телеграм-канал .