Скрипт резервного копирования СУБД PostgreSQL

Резервное копирование производиться при помощи утилиты pg_probackup

sudo sh -c 'echo "deb [arch=amd64] https://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" > /etc/apt/sources.list.d/pg_probackup.list'
sudo wget -O - https://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | sudo apt-key add - && sudo apt-get update
sudo apt-get install pg-probackup-12
sudo apt-get install pg-probackup-12-dbg

Примечание: на примере выше устанавливается 12 версия

Далее делаем символьную ссылку:

sudo ln -s /usr/bin/pg_probackup-12 /usr/bin/pg_probackup

Вносим изменения в файл postgresql.conf

wal_level = replica
archive_mode = on
archive_command = '"/usr/bin/pg_probackup" archive-push -B /srv/data/storage --instance iserv --wal-file-name=%f'
archive_timeout = 600

После установки pg_probackup выполняем создаём следующий скрипт:

#!/bin/bash

# Режим копирования данных: FULL или PAGE (частичное)
MODE=$1

# количество потоков
THREAD=4
# каталог для хранения копий
STORAGE=/srv/data/storage
# таймаут
ARCHIVE_TIMEOUT=62
# имя базы данных
DATABASE_NAME="example-db"

echo "$(date) запуск обслуживания"

echo "$(date) запуск архивации в режиме $MODE"
psql -c 'ALTER SYSTEM SET archive_timeout="'"1min"'";' -c 'select pg_reload_conf();'

if [[ $MODE = "FULL" ]]
then
    psql -U postgres -d $DATABASE_NAME -c "VACUUM FULL";
    pg_probackup backup -B $STORAGE --instance iserv -b FULL -j $THREAD --batch-size 100 --archive-timeout $ARCHIVE_TIMEOUT
else
    pg_probackup backup -B $STORAGE --instance iserv -b PAGE -j $THREAD --batch-size 100 --archive-timeout $ARCHIVE_TIMEOUT
fi

psql -c 'ALTER SYSTEM RESET archive_timeout;' -c 'select pg_reload_conf();'
pg_probackup delete -B $STORAGE --instance iserv --merge-expired --delete-expired --delete-wal

echo "$(date) завершение обслуживания"

Примечание: параметр archive-timeout устанавливается из-за ошибки ERROR: WAL segment 0000000100006C8B000000C8 could not be archived in 300 seconds

Внимание: на данный момент (18.12.2023) версия pg-probackup-10 устарела и не доступна в репозитории. Для её установки требуется вручную перейти в репозиторий http://repo.postgrespro.ru/pg_probackup/deb/pool/main-bionic/p/pg-probackup-10/ и скачать два файла:

  • wget http://repo.postgrespro.ru/pg_probackup/deb/pool/main-bionic/p/pg-probackup-10/pg-probackup-10-dbg_2.5.8-1.9e9509d8aab21565d95b44daeafcca6b7516597c.bionic_amd64.deb
  • wget http://repo.postgrespro.ru/pg_probackup/deb/pool/main-bionic/p/pg-probackup-10/pg-probackup-10_2.5.8-1.9e9509d8aab21565d95b44daeafcca6b7516597c.bionic_amd64.deb

После чего установить на сервер:

sudo dpkg -i pg-probackup-10_2.5.8-1.9e9509d8aab21565d95b44daeafcca6b7516597c.bionic_amd64.deb

sudo dpkg -i pg-probackup-10-dbg_2.5.8-1.9e9509d8aab21565d95b44daeafcca6b7516597c.bionic_amd64.deb

Print Friendly, PDF & Email

Добавить комментарий