Yedekleme Araçları

pg_dump


Bu videomda postgresqldeki en temel yedekleme aracı olan pg_dump'ı anlatacağım.
Pgdump yönteminde veri tabanı objelerinin SQL scriptleri yedeklenerek veri tabanının yeniden yaratılması sql cümleleri üzerinden yapılır. Pg_dump komut satırı aracı ile SQL dump backup ve restore işlemleri yapılır. Kullanım şekli aşağıdaki gibidir.

Öncelikle yedeğini alacağımız veritabanını belirliyoruz eğer yoksa oluşturuyoruz.

Kopyala
CREATE DATABASE ornekDB;
Kopyala
sudo -u postgres pg_dump ornekDB > ornekDB_dump

Böylelikle bir veritabanı oluşturduk ve yedeğini almış olduk. Yedeğimizin içeriğini görmek istersek ;

Kopyala
sudo nano ornekDB_dump

Yedek scriptinin içinde veritabanımızda bulunan bütün nesneler hakkında create ve alert komutları bulunuyor. Dikkat ettiyseniz CREATE DATABASE komutu yok. Bu yüzden restore yapmak istersen öncelikle veritabanını kendimiz tekrardan oluşturmalıyız.

Şimdi yedeğini aldığımız veritabanını silip restore etmeyi test edelim.

Kopyala
DROP DATABASE ornekDB;
Kopyala
CREATE DATABASE ornekDB;
Kopyala
sudo – u postgres psql ornekDB < ornekDB_dump

Başarılı bir şekilde aldığımız yedeğe geri döndük.

pgBack Rest


Bu videomda başka bir yedekleme aracı olan pgBackrst'den bahsedeceğim. Yukarıda anlattığımız pgdump ile arasındaki temel fark pgbackrest ile 1 veritabanının yedeğini alabiliyorken pgbackrest ile cluster yedeği alıyoruz yani bütün veritabanlarının yedeği alınabilir. Pg_dump sadece tam yedek alır pgbackrest ise Full Backup, Differential Backup ve Incremental Backup alır.
Full Backup: Tüm verilerin yedeğini alır.
Differential Backup: Son full yedekten sonra değişen verilerin yedeğini alır.
Incremental Backup: Son herhangi bir yedekten sonra değişen verilerin yedeğini alır.
Şimdi adım adım kurulumu tamamlayalım.

1- pgBackRest Yükleme


Sistemi Güncelleme

Kopyala
sudo apt update && sudo apt upgrade -y

Gerekli bağımlılıkları yükleme

Kopyala
sudo apt install wget gnupg2 lsb-release -y

pgBackRest yükleme

Kopyala
sudo apt install pgbackrest -y

Kurulumu doğrulama

Kopyala
pgbackrest --version

2- pgBackRest Konfigürasyonu


Yedekleri tutacağımız dizini oluşturup yetkilendiriyoruz

Kopyala
sudo mkdir -p /var/lib/pgbackrest
sudo chown postgres:postgres /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest

pgBackRest konfigürasyonunu düzenleyeceğiz

Kopyala
sudo nano /etc/pgbackrest.conf

Üstte girdiğimiz dizinin içini aşağıdaki gibi dolduruyoruz

Kopyala
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
repo1-retention-diff=4
log-level-console=info
log-level-file=debug
log-path=/var/log/pgbackrest

[pg17]
pg1-path=/var/lib/postgresql/17/main
pg1-port=5432
pg1-user=postgres

Gerekli izinleri veriyoruz

Kopyala
sudo chmod 640 /etc/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest.con

3- PostgreSQL'i pgBackRest için konfigüre etme


postgresql.conf dosyasını düzenleme

Kopyala
sudo nano /etc/postgresql/17/main/postgresql.conf

Üstte girdiğimiz dizinin içini aşağıdaki gibi dolduruyoruz

Kopyala
archive_mode = on
archive_command = 'pgbackrest --stanza=pg17 archive-push %p'
wal_level = replica
max_wal_senders = 3

PostgreSQL'i yeniden başlatıyoruz

Kopyala
sudo systemctl restart postgresql

4- Stanza Oluşturma


Stanza, pgBackRest’te bir yedekleme yapılandırmasını tanımlayan mantıksal bir isimdir. Yani bir veritabanı kümesinin (cluster) pgBackRest konfigürasyonundaki karşılığıdır.

Kopyala
sudo -u postgres pgbackrest --stanza=pg17 --log-level-console=info stanza-create

Stanzanın durumunu kontrol ediyoruz

Kopyala
sudo -u postgres pgbackrest --stanza=pg17 --log-level-console=info check

Pgbackrest kurulumu tamamlandı artık yedek alabilir ve restore edebiliriz.Ben full backup olarak anlattım videomda siz diğer backup çeşitleriyle de alabilirsiniz tanımlarını yukarıda anlatmıştım.

Full Backup

Kopyala
sudo -u postgres pgbackrest --stanza=pg17 --type=full backup

Differential Backup

Kopyala
sudo -u postgres pgbackrest --stanza=pg17 --type=diff backup

Incremental Backup

Kopyala
sudo -u postgres pgbackrest --stanza=pg17 --type=incr backup

Şimdi clusterimizde manuel olarak bir felaket oluşturalım

Kopyala
rm -r /var/lib/postgresql/17/main
systemctl stop postgresql
mkdir /var/lib/postgresql/17/main 
chown postgres:postgres /var/lib/postgresql/17/main 
chmod 700 /var/lib/postgresql/17/main

Gördüğünüz gibi bütün clusterimiz silindi erişemiyoruz. Şimdi önceki adımlarda aldığımız fullbackup'a geri dönelim.

Restore İşlemleri

Kopyala
sudo systemctl stop postgresql
sudo -u postgres pgbackrest --stanza=pg17 --delta restore
sudo systemctl start postgresql

Restore işlemi tamamlandı artık bütün veritabanlarına aldığınız yedektekti haline erişebilirsiniz.


Kaynaklar: Faruk Çevik