Инструкция по резевному копированию СУБД Postgres (pg_basebackup)

    Инструкция по резевному копированию СУБД Postgres (pg_basebackup)

    0. В примере используется Postgresql-12. Для других версий необходимо уточнить пути расположения бинарных файлов.

    1. Наши резервные копии будут распологатся в каталоге /BACKUP/db

    Создадим этот каталог

    # cd /
    # mkdir BACKUP
    # cd BACKUP
    # mkdir db
    # cd /

    2. Накатим права postgres на созданный каталог и всё что внутри.

    # chown -R postgres:postgres /BACKUP

    3. Создадим каталог, где будут хранится скрипты. В том числе, скрипт резервного копирования.

    # mkdir /opt/scripts

    # touch /opt/scripts/backup_base.sh

    # mcedit /opt/scripts/backup_base.sh

    4. Внесем следующие строки в SHELL скрипт:

    ==== Начало скрипта

    #! /usr/bin/bash

    #Складировать будем бэкапы по датам. Один бэкап в одну папку
    dt=`date +%Y%m%d`
    mkdir -p /BACKUP/db/$dt

    #Настроим автоматическую ротацию файлов. Старые копии будут затиратся.

    #Для увеличения количества копий увеличьте цифру 7 до необходимого значения.
    find /BACKUP/db/* -mtime +7 -print0 | xargs -0 rm -Rf

    #Выполнение резервной копии
    /usr/pgsql-12/bin/pg_basebackup --wal-method=stream -z --format=tar -U postgres -D /BACKUP/db/$dt

    ==== Конец скрипта

    Примечание: Для определения того, где находится pg_basebackup или bash, воспользуйтесь командой whereis. Например, whereis pg_basebackup.

    5. Сохраняем скрипт, делаем этот скрипт исполняемым.

    6. Запустим скрипт и убедимся, что он работает правильно. Через некоторое время в каталоге /BACKUP/db должен создатся каталог с архивом (tar.gz) резервной копией внутри. По желанию ставим в cron на вечернее время.

    Идеи, баги, вопросы?

    Сообщи нам t.me/screensquid