mkdir -p /build
curl -fsSL \
https://github.com/pgbackrest/pgbackrest/releases/download/release%2F2.59.0/pgbackrest-2.59.0.tar.gz | \
tar zx -C /build
sudo yum install meson gcc postgresql14-devel openssl-devel libxml2-devel \
lz4-devel libzstd-devel bzip2-devel libssh2-devel systemd-devel
meson setup /build/pgbackrest /build/pgbackrest-2.59.0
ninja -C /build/pgbackrest
meson test -C /build/pgbackrest --suite smoke
Output suppressed for testing
sudo yum install postgresql-libs libssh2
sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
sudo -u postgres pgbackrest
Output suppressed for testing
sudo -u postgres /usr/pgsql-14/bin/initdb \
-D /var/lib/pgsql/14/data -k -A peer
sudo -u postgres bash -c ' \
export PGBACKREST_LOG_PATH=/path/set/by/env && \
pgbackrest --log-level-console=error help backup log-path'
Output suppressed for testing
sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown postgres:postgres /var/lib/pgbackrest
sudo systemctl restart postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info check
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo \
--log-level-console=info backup
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --type=diff \
--log-level-console=info backup
Output suppressed for testing
#m h dom mon dow command 30 06 * * 0 pgbackrest --type=full --stanza=demo backup 30 06 * * 1-6 pgbackrest --type=diff --stanza=demo backup
sudo -u postgres pgbackrest info
Output suppressed for testing
sudo systemctl stop postgresql-14.service
sudo -u postgres rm /var/lib/pgsql/14/data/global/pg_control
sudo systemctl start postgresql-14.service
sudo systemctl status postgresql-14.service
Output suppressed for testing
sudo -u postgres find /var/lib/pgsql/14/data -mindepth 1 -delete
sudo -u postgres pgbackrest --stanza=demo restore
sudo systemctl start postgresql-14.service
sudo -u postgres cat \
/var/lib/pgsql/pgbackrest/doc/example/pgsql-pgbackrest-info.sql
Output suppressed for testing
sudo -u postgres psql -f \
/var/lib/pgsql/pgbackrest/doc/example/pgsql-pgbackrest-info.sql
sudo -u postgres cat \
/var/lib/pgsql/pgbackrest/doc/example/pgsql-pgbackrest-query.sql
Output suppressed for testing
sudo -u postgres psql -f \
/var/lib/pgsql/pgbackrest/doc/example/pgsql-pgbackrest-query.sql
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --type=full backup
sudo -u postgres find /var/lib/pgbackrest/backup/demo/latest/ -type f | wc -l
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --annotation=source="demo backup" \
--annotation=key=value --type=full backup
sudo -u postgres pgbackrest --stanza=demo --set=[Test Variable] info
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --set=[Test Variable] \
--annotation=key= --annotation=new_key=new_value annotate
sudo -u postgres pgbackrest --stanza=demo --set=[Test Variable] info
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --type=full \
--log-level-console=detail backup
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --type=full \
--log-level-console=info backup
Output suppressed for testing
rollingset of differentials for the last day or more. This allows quick restores to recent points-in-time but reduces overall space consumption.
sudo -u postgres pgbackrest --stanza=demo --type=diff backup
sudo -u postgres pgbackrest --stanza=demo --type=incr backup
sudo -u postgres pgbackrest --stanza=demo --type=diff \
--log-level-console=info backup
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --type=diff \
--log-level-console=info backup
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --log-level-console=detail \
--repo1-retention-archive-type=diff --repo1-retention-archive=1 expire
Output suppressed for testing
sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta \
--log-level-console=detail restore
Output suppressed for testing
sudo systemctl start postgresql-14.service
sudo -u postgres psql -c "create database test1;"
Output suppressed for testing
sudo -u postgres psql -c "create database test2;"
Output suppressed for testing
sudo -u postgres psql -c "create table test1_table (id int); \
insert into test1_table (id) values (1);" test1
Output suppressed for testing
sudo -u postgres psql -c "create table test2_table (id int); \
insert into test2_table (id) values (2);" test2
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --type=incr backup
sudo -u postgres du -sh /var/lib/pgsql/14/data/base/[Test Variable]
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo \
--set=[Test Variable] info
Output suppressed for testing
sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta \
--db-include=test2 --type=immediate --target-action=promote restore
sudo systemctl start postgresql-14.service
sudo -u postgres psql -c "select * from test2_table;" test2
Output suppressed for testing
sudo -u postgres psql -c "select * from test1_table;" test1
Output suppressed for testing
sudo -u postgres du -sh /var/lib/pgsql/14/data/base/[Test Variable]
Output suppressed for testing
sudo -u postgres psql -c "drop database test1;"
Output suppressed for testing
sudo -u postgres psql -c "select oid, datname from pg_database order by oid;"
Output suppressed for testing
sudo -u postgres psql -c "begin; \
create table important_table (message text); \
insert into important_table values ('Important Data'); \
commit; \
select * from important_table;"
Output suppressed for testing
sudo -u postgres psql -Atc "select current_timestamp"
Output suppressed for testing
sudo -u postgres psql -c "begin; \
drop table important_table; \
commit; \
select * from important_table;"
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --type=incr backup
sudo -u postgres pgbackrest info
Output suppressed for testing
sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta \
--set=[Test Variable] --target-timeline=current \
--type=time "--target=[Test Variable]" --target-action=promote restore
sudo systemctl start postgresql-14.service
sudo -u postgres cat /var/lib/pgsql/14/data/log/postgresql.log
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --delta \
--type=time "--target=[Test Variable]" \
--target-action=promote restore
sudo -u postgres cat /var/lib/pgsql/14/data/postgresql.auto.conf
Output suppressed for testing
sudo systemctl start postgresql-14.service
sudo -u postgres psql -c "select * from important_table"
Output suppressed for testing
sudo -u postgres cat /var/lib/pgsql/14/data/log/postgresql.log
Output suppressed for testing
sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stop
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --repo=1 \
--log-level-console=info stanza-delete
Output suppressed for testing
hierarchical namespaceas this will cause errors during expire.
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --repo=2 \
--log-level-console=info backup
Output suppressed for testing
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::demo-bucket"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"demo-repo"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::demo-bucket"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"demo-repo/*"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectTagging",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::demo-bucket/demo-repo/*"
]
}
]
}
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --repo=3 \
--log-level-console=info backup
Output suppressed for testing
sudo -u postgres mkdir -m 750 -p /var/lib/pgsql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/pgsql/.ssh/id_rsa_sftp \
-t rsa -b 4096 -N "" -m PEM
sudo -u pgbackrest mkdir -m 750 -p /home/pgbackrest/.ssh
(sudo ssh root@pg-primary cat /var/lib/pgsql/.ssh/id_rsa_sftp.pub) | \
sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys
strict
ssh-keyscan -H sftp-server >> /var/lib/pgsql/.ssh/known_hosts 2>/dev/null
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --repo=4 \
--log-level-console=info backup
Output suppressed for testing
sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo stop
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --repo=3 stanza-delete
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --repo=3 info
Output suppressed for testing
key=demo-repo/backup/demo/backup.info; \
aws s3api list-object-versions --bucket demo-bucket \
--prefix $key --output table \
--query "sort_by([Versions[?Key=='$key'].{Action:'PUT', \
Modified:LastModified,Object:Key}, \
DeleteMarkers[?Key=='$key'].{Action:'DELETE', \
Modified:LastModified,Object:Key}][],&Modified)"
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --repo=3 \
--repo-target-time="[Test Variable]" info
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --repo=3 --delta \
--repo-target-time="[Test Variable]" --log-level-console=info restore
Output suppressed for testing
sudo systemctl start postgresql-14.service
sudo groupadd pgbackrest
sudo adduser -gpgbackrest -n pgbackrest
sudo yum install postgresql-libs libssh2
sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown pgbackrest:pgbackrest /var/lib/pgbackrest
sudo cat /etc/systemd/system/pgbackrest.service
Output suppressed for testing
sudo systemctl enable pgbackrest
sudo systemctl start pgbackrest
sudo cat /etc/systemd/system/pgbackrest.service
Output suppressed for testing
sudo systemctl enable pgbackrest
sudo systemctl start pgbackrest
sudo -u pgbackrest pgbackrest --stanza=demo stanza-create
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo check
Output suppressed for testing
sudo -u pgbackrest pgbackrest --stanza=demo check
Output suppressed for testing
sudo -u pgbackrest pgbackrest --stanza=demo backup
Output suppressed for testing
sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta restore
sudo systemctl start postgresql-14.service
sudo -u pgbackrest pgbackrest --stanza=demo --type=full backup
sudo -u pgbackrest pgbackrest --stanza=demo --type=full backup
sudo -u pgbackrest pgbackrest info
Output suppressed for testing
sudo -u postgres pgbackrest stop
sudo -u pgbackrest pgbackrest --stanza=demo backup
Output suppressed for testing
sudo -u postgres pgbackrest stop
Output suppressed for testing
sudo -u postgres pgbackrest start
sudo -u postgres pgbackrest --stanza=demo stop
sudo -u pgbackrest pgbackrest --stanza=demo backup
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo start
sudo yum install postgresql-libs libssh2
sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
sudo cat /etc/systemd/system/pgbackrest.service
Output suppressed for testing
sudo systemctl enable pgbackrest
sudo systemctl start pgbackrest
sudo -u postgres mkdir -p -m 700 /var/lib/pgsql/14/data
sudo -u postgres pgbackrest --stanza=demo --type=standby restore
sudo -u postgres cat /var/lib/pgsql/14/data/postgresql.auto.conf
Output suppressed for testing
sudo systemctl start postgresql-14.service
sudo -u postgres cat /var/lib/pgsql/14/data/log/postgresql.log
Output suppressed for testing
sudo -u postgres psql -c " \
begin; \
create table replicated_table (message text); \
insert into replicated_table values ('Important Data'); \
commit; \
select * from replicated_table";
Output suppressed for testing
sudo -u postgres psql -c "select * from replicated_table;"
Output suppressed for testing
sudo -u postgres psql -c "select *, current_timestamp from pg_switch_wal()";
Output suppressed for testing
sudo -u postgres psql -c " \
select *, current_timestamp from replicated_table"
Output suppressed for testing
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info check
Output suppressed for testing
sudo -u postgres psql -c " \
create user replicator password 'jw8s0F4' replication";
Output suppressed for testing
sudo -u postgres sh -c 'echo \
"host replication replicator {[host-pg2-ip]}/32 md5" \
>> /var/lib/pgsql/14/data/pg_hba.conf'
sudo systemctl reload postgresql-14.service
sudo -u postgres sh -c 'echo \
"{[host-pg1-ip]}:*:replication:replicator:jw8s0F4" \
>> /var/lib/pgsql/.pgpass'
sudo -u postgres chmod 600 /var/lib/pgsql/.pgpass
sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta --type=standby restore
sudo -u postgres cat /var/lib/pgsql/14/data/postgresql.auto.conf
Output suppressed for testing
sudo systemctl start postgresql-14.service
sudo -u postgres cat /var/lib/pgsql/14/data/log/postgresql.log
Output suppressed for testing
sudo -u postgres psql -c " \
begin; \
create table stream_table (message text); \
insert into stream_table values ('Important Data'); \
commit; \
select *, current_timestamp from stream_table";
Output suppressed for testing
sudo -u postgres psql -c " \
select *, current_timestamp from stream_table"
Output suppressed for testing
sudo yum install postgresql-libs libssh2
sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest
sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
sudo cat /etc/systemd/system/pgbackrest.service
Output suppressed for testing
sudo systemctl enable pgbackrest
sudo systemctl start pgbackrest
sudo -u postgres /usr/pgsql-14/bin/initdb \
-D /var/lib/pgsql/14/data -k -A peer
sudo systemctl restart postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo-alt --log-level-console=info stanza-create
Output suppressed for testing
sudo -u postgres pgbackrest --log-level-console=info check
Output suppressed for testing
sudo -u pgbackrest pgbackrest --log-level-console=info check
Output suppressed for testing
sudo mkdir -p -m 750 /var/spool/pgbackrest
sudo chown postgres:postgres /var/spool/pgbackrest
sudo mkdir -p -m 750 /var/spool/pgbackrest
sudo chown postgres:postgres /var/spool/pgbackrest
sudo -u postgres psql -c "alter user replicator password 'bogus'"
Output suppressed for testing
sudo systemctl restart postgresql-14.service
looking aheadto see which WAL segments are ready to be archived beyond the request that PostgreSQL is currently making via the archive_command. WAL segments are transferred to the archive directly from the pg_xlog/pg_wal directory and success is only returned by the archive_command when the WAL segment has been safely stored in the archive.
sudo -u postgres psql -c " \
select pg_create_restore_point('test async push'); select pg_switch_wal(); \
select pg_create_restore_point('test async push'); select pg_switch_wal(); \
select pg_create_restore_point('test async push'); select pg_switch_wal(); \
select pg_create_restore_point('test async push'); select pg_switch_wal(); \
select pg_create_restore_point('test async push'); select pg_switch_wal();"
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info check
Output suppressed for testing
sudo -u postgres cat /var/log/pgbackrest/demo-archive-push-async.log
Output suppressed for testing
sudo -u postgres cat /var/log/pgbackrest/demo-archive-get-async.log
Output suppressed for testing
sudo -u postgres psql -c "alter user replicator password 'jw8s0F4'"
Output suppressed for testing
sudo -u pgbackrest pgbackrest --stanza=demo --log-level-console=detail backup
Output suppressed for testing
sudo systemctl stop postgresql-14.service
sudo systemctl stop postgresql-14.service
sudo -u postgres /usr/pgsql-15/bin/initdb \
-D /var/lib/pgsql/15/data -k -A peer
sudo -u postgres sh -c 'cd /var/lib/pgsql && \
/usr/pgsql-15/bin/pg_upgrade \
--old-bindir=/usr/pgsql-14/bin \
--new-bindir=/usr/pgsql-15/bin \
--old-datadir=/var/lib/pgsql/14/data \
--new-datadir=/var/lib/pgsql/15/data \
--old-options=" -c config_file=/var/lib/pgsql/14/data/postgresql.conf" \
--new-options=" -c config_file=/var/lib/pgsql/15/data/postgresql.conf"'
Output suppressed for testing
sudo cp /var/lib/pgsql/14/data/pg_hba.conf \
/var/lib/pgsql/15/data/pg_hba.conf
sudo -u postgres pgbackrest --stanza=demo --no-online \
--log-level-console=info stanza-upgrade
Output suppressed for testing
sudo systemctl start postgresql-15.service
Output suppressed for testing
sudo systemctl status postgresql-15.service
sudo -u postgres pgbackrest --stanza=demo check
Output suppressed for testing
sudo rm -rf /var/lib/pgsql/14/data
sudo rm -rf /var/lib/pgsql/14/data
sudo -u postgres mkdir -p -m 700 /usr/pgsql-15/bin
sudo -u pgbackrest pgbackrest --stanza=demo check
Output suppressed for testing
sudo -u pgbackrest pgbackrest --stanza=demo --type=full backup
sudo -u postgres pgbackrest --stanza=demo --type=standby restore
sudo systemctl start postgresql-15.service
sudo -u postgres pgbackrest --stanza=demo check
Output suppressed for testing