Резервное копирование производиться при помощи утилиты 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