В этой статье объясним, как настроить автоматическое резервное копирование баз данных SQL Postgres на серверы объектного хранилища S3. Для этого нам понадобится предварительно настроенный сервер на ОС Linux Ubuntu.
Установка и настройка ПО s3cmd для подключения к S3-хранилищу
Устанавливаем s3cmd:
sudo apt-get install s3cmd
Настраиваем подключение к нашему S3-хранилищу:
s3cmd –configure
Вводим свои данные от S3-хранилища:
s3cmd ls
Это позволит увидеть S3 бакеты.
Создание скрипта для резервных копий БД SQL Postgres
Cоздаем скрипт backup.sh следующего содержания:
#!/usr/bin/env bash DB_NAME=BP # Имя БД DB_USER=postgres # Пользователь БД DB_PASS=*** # Пароль БД TIMESTAMP=$(date +%F_%T | tr ':' '-') TEMP_FILE=$(mktemp tmp.XXXXXXXXXX) S3_FILE="s3://1c-backup/day/BP-$TIMESTAMP" # Путь куда сохранять бэкапы PGPASSWORD=$DB_PASS pg_dump -Fc --no-acl -h localhost -U $DB_USER $DB_NAME > $TEMP_FILE s3cmd put $TEMP_FILE $S3_FILE rm "$TEMP_FILE"
Создание скрипта для удаления старых резервных копий
Создаем скрипт backupdel.sh следующего содержания:
s3cmd ls s3://1c-backup/day/ | while read -r line;
do
createDate=`echo $line|awk {'print $1" "$2'}`
createDate=`date -d"$createDate" +%s`
olderThan=`date --date "14 days ago" +%s` # кол-во дней которые хранятся бэкапы
if [[ $createDate -lt $olderThan ]]
then
fileName=`echo $line|awk {'print $4'}`
if [[ $fileName != "" ]]
then
s3cmd del "$fileName"
fi
fi
done;
Настраиваем планировщик Cron для выполнения скриптов
Устанавливаем:
sudo apt-get install cron
Открываем файл crontab, в котором хранятся задания:
crontab -e
Добавляем в crontab скрипты и задаем время, когда им необходимо запуститься.
