Pgbackrest Kurulumu, Backup ve Restore İşlemi

Cihat Küçükbağrıaçık
4 min readMar 30, 2023

--

Pgbackrest Postgresql için yedekleme araçlarında en popüler olan bir araçtır. Pgbackrest sayesinde Postgresql üzerinde hızlı bir şekilde Backup alma ve Restore işlemleri yapabiliriz. Bu yazıda PgBackRest’in Ubuntu 22.04 üzerine kurulumunu, yedek alınmasını ve yedekten sistemi geri döndürme işlemlerini yapacağız.

Pgcakrest Kurulumu

# Pgbackrest Paket kurulumunu yapıyoruz.
apt-get install -y pgbackrest

Config Dosyasının Düzenlenmesi

repo1-path: Backup işlemlerinin hangi konuma alınacağını bekler.
repo1-retention-diff: Toplamda ne kadar Diff Backup alacağını bekler.
repo1-retention-full: Toplamda ne kadar Full Backup alacağını bekler.
process-max: Backup ve Restore işleminde en fazla ne kadar işlem yapılacağını bekler. Bu değer sizin sunucunun CPU özelliğine göre değiştirebilirsiniz.
compress-level: Yedeklenen verilerin ne kadar sıkıştırılacağını bekler.
[postgres]: Stanzanın adını bekler. Pgbackrest birden fazla Postgresql servisinden yedek alabilir. Bizim tek instance olduğu için biz direkt olarak ”postgres” olarak tanımlıyoruz.
pg1-path: Postgresql data yolunu bekler. psql ile show data_directory; komutu ile öğrenebilirsiniz.
pg1-socket-path: Postgresql socket file yolunu bekler. psql ile show unix_socket_directories; komutu ile öğrenebilirsiniz.

Daha fazla bilgi ve başka özellikler için Pgbackrest dökümanına göz atabilirsiniz.

# Pgbackrest Conf dosyasını düzenliyoruz.
nano /etc/pgbackrest.conf

# Aşağıdaki ayarları dosyaya kayıt edip çıkıyoruz.

[global]
repo1-path=/backup/pgbackrest
repo1-retention-diff=6
repo1-retention-full=2
log-level-console=info
log-level-file=debug
start-fast=y
process-max=5
compress-level=9
[postgres]
pg1-path=/var/lib/postgresql/15/main
pg1-port=5432
pg1-socket-path=/var/run/postgresql

Postgresql.conf Dosyasının Düzenlenmesi

Pgbackrest’in dosyaları archive modda aktarabilmesi için postgresql.conf dosyasını düzenliyoruz. Ayarların geçerli olması için servisi yeniden başlatıyoruz.

# postgresql.conf dosyasını düzenle.
nano /etc/postgresql/15/main/postgresql.conf

# Aşağıdaki komutları güncelliyoruz.
archive_mode = on;

archive_command = 'pgbackrest --stanza=postgres archive-push %p';

# Kayıt edip çıkıyoruz.

# postgresql restart ediyoruz.
systemctl restart postgresql

Yedekleme Klasörünü Konumlandırılması

Ben sunucu da var olan “/backup” diskini kullanacağım. Siz dileğiniz diske konumlandırabilirsiniz. Ancak unutulmamalıdır ki backup alınma amacı acil bir durum senaryosunda sistemi geri alabilmektir. Prod ortamlarında diskinizi konumlandırırken mümkün ise fiziksel olarak başka ortamlarda konumlandırın. Sanal sunucuda veya fiziksel olarak sunucuda bir sıkıntı olduğu zaman backup verilerinizde kaybolmayacaktır.

# Backup konumlandıracak diske gidilir.
cd /backup/

# Bir klasör tanımlıyoruz
mkdir pgbackrest

# Klasöre postgres kullanıcısını yetkili tanımlıyoruz.
chown -R postgres:postgres pgbackrest/

# Klasöre okuma, yazma izinlerini tanımlıyoruz.
chown -R 777 pgbackrest

# Ayarların doğruluğunu kontrol ediyoruz.
ls -l

# pg1-path ve pg1-socket-path dosya yollarını buluyoruz.
su - postgres

psql

show data_directory;

show unix_socket_directories;

Stanza Oluşturulması ve Backup Alınması

Postgresql Cluster için stanza oluşturup. Stanza kontrol ettikten sonra Back alacağız. Biz stanza ismini yukarda “postgres” olarak tanımladık. O yüzden burada da “postgres” olarak kullanacağız.

# postgres kullanıcısına geçiş sağlanır.
su - postgres

# Stanza oluşturuyoruz.
pgbackrest --stanza=postgres stanza-create

# Stanzayı kontrol ediyoruz.
pgbackrest --stanza=postgres check

# Full backup alınmasını sağlıyoruz.
pgbackrest --stanza=postgres --type=full backup

# Diff backup alınmasını sağlıyoruz.
pgbackrest --stanza=postgres --type=diff backup

# Stanzaya ait alınan yedekleri listeliyoruz.
pgbackrest --stanza=postgres info

Restore İşleminin Yapılması

Alınan backup dosyasından geri dönerken mevcut postgresql servisini durdurmak gerekmektedir. Restore işlemi yapıldıktan sonra servis yeniden başlatılacaktır.

# Stanzaya ait alınan yedekleri listeliyoruz.
pgbackrest --stanza=postgres info

# postgres kullanıcısından çıkıyoruz.
exit

# postgresql servisini durduruyoruz.
systemctl stop postgresql

# postgres kullanıcısına tekrardan giriş yapıyoruz.
su - postgres

# Restore komutunu çalıştırıyoruz.
# --delta ile var olan kayıtın üstüne yazmasını belirtiyoruz.
# --set ile geri dönmek istediğimiz backup ID'sini tanımlıyoruz.
# --type ile zaman bazında geri dönüş yapmak istediğimizi belirtiyoruz.
# --target ile zamanı belirtiyoruz.
pgbackrest --stanza=postgres --delta --set=20230326-100023F --type=time --target="2023-03-26 10:01:00" restore

# postgres kullanıcısından çıkıyoruz.
exit

# postgresql servisini yeniden başlatıyoruz.
systemctl restart postgresql

--

--

No responses yet