В этой статье объясним, как настроить автоматическое резервное копирование баз данных 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 скрипты и задаем время, когда им необходимо запуститься.