Πώς κάνουμε Backup και Restore στη PostgreSQL με τη χρήση του εργαλείου pgBackrest

- Πώς κάνουμε Backup και Restore στη PostgreSQL με τη χρήση του εργαλείου pgBackrest - 28 Αύγουστος 2026
- Πώς κάνουμε Point in Time Restore βάση δεδομένων PostgreSQL χωρίς την χρήση 3rd party tools - 24 Αύγουστος 2026
- Πώς κάνουμε Backup βάση δεδομένων PostgreSQL χωρίς την χρήση 3rd party tools - 18 Αύγουστος 2026
Όπως έχουμε δει σε προηγούμενα άρθρα σε παλαιότερες εκδόσεις PostgreSQL πριν την έκδοση 17 δεν υπήρχε η δυνατότητα για block level backup σαν αποτέλεσμα δεν μπορούσαμε να κάνουμε differential και incremental backups και θα έπρεπε να παίρνουμε κάθε μέρα full backup. Επίσης η διαχείριση των backups και του restore / recovery μέσα απο τα WALs (archive logs) ήταν πολύπλοκη. Αυτά τα δυό προβλήματα μπορούμε να τα λύσουμε με την χρήση ενός 3rd party tool του pgBackrest.
Τα βήματα της εγκατάστασης
Για το εγκατάστησουμε σε εκδόση Unix Oracle Linux / Red Hat τρέχουμε την παρακάτω εντολή:
sudo yum install pgbackrest --nogpgcheck -y
Αφού ολοκληρωθεί η εγκατάσταση για να δούμε ότι έχει εγκατασταθεί επιτυχώς μπορούμε να κάνουμε έναν έλεγχο για την έκδοση με την παρακάτω εντολή:
pgbackrest version
Έπειτα φτιάχνουμε τους φακέλους που θα αποθηκεύονται τα backup και δίνουμε τα σωστά δικαιώματα:
sudo mkdir -p /var/lib/pgbackrest sudo chmod 750 /var/lib/pgbackrest sudo chown postgres:postgres /var/lib/pgbackrest
Με την παρακάτω εντολή βρίσκουμε το path που έχει εγκατασταθεί η PostgreSQL, θα την χρειαστούμε αργότερα:
sudo -u postgres psql -c "SHOW data_directory;"
Στη συνέχεια κάνουμε τροποποίηση το configuration file, ως repo1-path η τοποθεσία που θα αποθηκεύονται τα backup, ως repo1-process-max είναι η παραλληλία που του επιτρέπουμε, ως repo1-retention-full ειναι πόσα backup πίσω θέλουμε να κρατάμε, από κάτω ορίζουμε το όνομα του backupset για το παράδειγμά μας το έχω πει postdb11 και από κάτω ως pg1-path βάζουμε το path που έχει εγκατασταθεί η PostgreSQL:
sudo vi /etc/pgbackrest.conf
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
process-max=2
[postdb11]
pg1-path=/var/lib/pgsql/11/dataΣτο αρχείο αυτό θα πρέπει να δώσουμε τα σωστά δικαιώματα:
sudo chown postgres:postgres /etc/pgbackrest.conf sudo chmod 640 /etc/pgbackrest.conf
Έπειτα πάμε στο configuration file της PostgreSQL που θα χρειαστεί να βάλουμε κάποιες παραμέτρους:
sudo vi /var/lib/pgsql/11/data/postgresql.conf
Πάμε κάτω κάτω στην κατηγορία # – Archiving και προσθέτουμε τα παρακάτω:
# - Archiving -
archive_mode = on # enables archiving; off, on, or always
archive_command = 'pgbackrest --stanza=postdb11 archive-push %p'Όπως επίσης και το wal_level:
wal_level = replicaΜετά θα χρειαστεί να κάνουμε restart το service της PostgresSQL:
sudo systemctl restart postgresql-11
Πώς εκτελούνται τα backups μέσω του pgBackrest
Για να εκτελέσουμε τώρα ένα backup θα πρέπει πρώτα να φτιάξουμε το backup set με το όνομα που δώσαμε στο configuration file στην περίπτωση μας με το όνομα postdb11:
sudo -u postgres pgbackrest --stanza=postdb11 stanza-create
Για να πάρουμε ένα full backup τρέχουμε την παρακάτω εντολή:
sudo -u postgres pgbackrest --stanza=postdb11 --type=full backup
Αν θέλουμε να πατήσουμε πάνω του και να πάρουμε ένα differential backup τρέχουμε το παρακάτω:
sudo -u postgres pgbackrest --stanza=postdb11 --type=diff backup
Τώρα για να δούμε τι backups έχουν εκτελεστεί και έχουμε, τρέχουμε την εντολή:
sudo -u postgres pgbackrest --stanza=postdb11 info

Προσθήκη διαδικασίας σε scheduler (cronjob)
Μπορούμε τώρα πολύ απλά να προσθέσουμε δύο jobs για να αυτοματοποιηθεί η διαδικασία backup με ένα full backup κάθε Κυριακή στις 23:00 και differential backups τις υπόλοιπες ημέρες.
Για να δίνει αυτό θα πρέπει να προσθέσουμε τα παρακάτω στο crontab:
sudo -u postgres crontab -e
# Full Backup
0 23 * * 0 pgbackrest --stanza=postdb11 --type=full backup >> /var/log/pgbackrest/backup-full.log 2>&1
# Differential Backup
0 23 * * 1-6 pgbackrest --stanza=postdb11 --type=diff backup >> /var/log/pgbackrest/backup-diff.log 2>&1
Πώς κάνουμε restore τη βάση δεδομένων με τη χρήση του pgBackrest
Πρώτα σταματάμε το service:
sudo systemctl stop postgresql-11
Σβήνουμε τα αρχεία της βάσης δεδομένων για το παράδειγμα:
sudo -u postgres rm -rf /var/lib/pgsql/11/data/*
Για να ξεκινήσουμε το restore τρέχουμε την παρακάτω εντολή και με την παράμετρο target μπορούμε να κάνουμε Point In Time Restore:
sudo -u postgres pgbackrest --stanza=postdb11 restore --type=time --target="2026-07-25 23:30:00"
Για να δούμε το log του restore τρέχουμε το παρακάτω:
sudo tail -f /var/log/pgbackrest/postdb11-restore.log

Για να δούμε το log της PostgreSQL τρέχουμε το παρακάτω:
sudo journalctl -u postgresql-11.service -e --no-pager

