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

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

Όπως έχουμε δει σε προηγούμενα άρθρα σε παλαιότερες εκδόσεις 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
Πώς κάνουμε Backup και Restore στη PostgreSQL με τη χρήση του εργαλείου pgBackrest

Προσθήκη διαδικασίας σε 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
Πώς κάνουμε Backup και Restore στη PostgreSQL με τη χρήση του εργαλείου pgBackrest

Για να δούμε το log της PostgreSQL τρέχουμε το παρακάτω:

sudo journalctl -u postgresql-11.service -e --no-pager

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση