• DevOps
  • Защита информации
  • ИТ-поддержка
  • Создание резервных копий SQL Postgres на S3-хранилище

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

    Окно nginx

    Рисунок 1 - Задания Cron

    Не нашли ответа на свой вопрос?
    Содержание

    Есть вопросы?

    Закажите звонок специалиста!

    Есть вопросы?

    Закажите звонок специалиста!
    *нажимая на кнопку, Вы даете согласие на обработку персональных данных