pgBackRest Backup to S3

Page content

In this article I will show you how to use pgBackRest to backup PostgreSQL servers to S3 buckets.

For the purpose of this demo setup, we’ll use MinIO server, which is an Amazon S3 Compatible Object Storage.

s3cmd

yum install -y epel-release
yum --enablerepo epel-testing install -y s3cmd
nano ~/.s3cfg
host_base = minio.mydomain.intra:9000
host_bucket = minio.mydomain.intra:9000
bucket_location = us-east-1
use_https = false
access_key = <minop_access_key>
secret_key = <minio_secret_key>
signature_v2 = False

Create bucket and folders

s3cmd mb --no-check-certificate s3://pgbackrest
mkdir postgresql12
s3cmd cp postgresql1 --no-check-certificate s3://pgbackrest
s3cmd ls --no-check-certificate s3://pgbackrest/postgresql12
                       DIR   s3://pgbackrest/postgresql12/

Installation

yum install epel-release -y
yum update -y
rpm -Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
yum install -y pgbackrest

Configure pgBackRest

nano /etc/pgbackrest.conf

[global]
repo1-path=/postgresql12
repo1-type=s3
repo1-s3-endpoint=minio.mydomain.intra
repo1-s3-port=9000
repo1-s3-bucket=pgbackrest
repo1-s3-verify-tls=n
repo1-s3-key=<minop_access_key>
repo1-s3-key-secret=<minio_secret_key>
repo1-s3-region=us-east-1

repo1-retention-full=1
process-max=2
log-level-console=info
log-level-file=debug
start-fast=y
delta=y

[postgresql12]
pg1-path=/var/lib/pgsql/12/data

Configure PostgreSQL on postgresql12 server

nano /var/lib/pgsql/12/data/postgresql.conf
...
archive_mode = on
archive_command = 'pgbackrest --stanza=postgresql12 archive-push %p'
...

systemctl restart postgresql12

Perform a backup

Before we can start a backup we need to initialize the backup repository.

sudo -iu postgres pgbackrest --stanza=postgresql12 stanza-create
sudo -iu postgres pgbackrest --stanza=postgresql12 check
sudo -iu postgres pgbackrest --stanza=postgresql12 --type=full backup

Show backup information

$ sudo -iu postgres pgbackrest info
stanza: postgresql12
    status: ok
    cipher: none

    db (current)
        wal archive min/max (11-1): 000000010000000000000005/000000010000000000000005

        full backup: 20200219-091209F
            timestamp start/stop: 2020-02-19 09:12:09 / 2020-02-19 09:12:21
            wal start/stop: 000000010000000000000005 / 000000010000000000000005
            database size: 23.5MB, backup size: 23.5MB
            repository size: 2.8MB, repository backup size: 2.8MB

Restore a backup

The restore command can then be used on the postgresql host.

sudo systemctl stop postgresql12

sudo -iu postgres pgbackrest --stanza=postgresql12 restore

Restore only test database:

sudo -iu postgres pgbackrest --stanza=postgresql12 --delta --db-include=test restore