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.
CREATE DATABASE ornekDB;
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 ;
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.
DROP DATABASE ornekDB;
CREATE DATABASE ornekDB;
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. Sistemi Güncelleme
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
sudo apt update && sudo apt upgrade -y
Gerekli bağımlılıkları yükleme
sudo apt install wget gnupg2 lsb-release -y
pgBackRest yükleme
sudo apt install pgbackrest -y
Kurulumu doğrulama
pgbackrest --version
2- pgBackRest Konfigürasyonu
Yedekleri tutacağımız dizini oluşturup yetkilendiriyoruz
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
sudo nano /etc/pgbackrest.conf
Üstte girdiğimiz dizinin içini aşağıdaki gibi dolduruyoruz
[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
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
sudo nano /etc/postgresql/17/main/postgresql.conf
Üstte girdiğimiz dizinin içini aşağıdaki gibi dolduruyoruz
archive_mode = on
archive_command = 'pgbackrest --stanza=pg17 archive-push %p'
wal_level = replica
max_wal_senders = 3
PostgreSQL'i yeniden başlatıyoruz
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.
sudo -u postgres pgbackrest --stanza=pg17 --log-level-console=info stanza-create
Stanzanın durumunu kontrol ediyoruz
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
sudo -u postgres pgbackrest --stanza=pg17 --type=full backup
Differential Backup
sudo -u postgres pgbackrest --stanza=pg17 --type=diff backup
Incremental Backup
sudo -u postgres pgbackrest --stanza=pg17 --type=incr backup
Şimdi clusterimizde manuel olarak bir felaket oluşturalım
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
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