Post

PostgreSQL WAL Backup & Restore

PostgreSQL WAL Backup & Restore

WAL Nedir? (Write-Ahead Logging)

WAL, veritabanı işlemlerinin güvenilirliğini sağlamak için verilerin disk üzerinde kaydedilmeden önce bir günlük dosyasında (WAL dosyası) yazılmasını sağlayan bir mekanizmadır. Bu yaklaşım, veri kaybını minimize etmek ve veri tabanının beklenmedik kapanmalar sonrası eski durumuna geri yüklenebilmesini sağlamak amacıyla kullanılır.

WAL Yedekleme (Backup)

a: Archive Mode'u Etkinleştirme

WAL dosyalarını yedeklemek için ilk adım, archive_mode'u etkinleştirmektir.

PostgreSQL’in konfigürasyon dosyasını açın. Genellikle /etc/postgresql/<version>/main/postgresql.conf konumundadır.

wal_level = replica
archive_mode = on
archive_command = 'cp %p /path/to/archive/directory/%f'
  • wal_level = replica: WAL düzeyini 'replica' olarak ayarlar.
  • archive_mode = on: Arşivleme modunu etkinleştirir.
  • archive_command: Her yeni WAL dosyası oluşturulduğunda çalışır. %p kaynak dosyanın yolunu, %f hedef dosyanın adını temsil eder. Bu komut ile WAL dosyaları belirtilen arşiv dizinine kopyalanır.

b: Arşiv Dizini Oluşturma

PostgreSQL, WAL dosyalarını otomatik olarak arşivleyecektir. Ancak, arşivleme işleminin düzgün çalıştığını kontrol etmek için log dosyalarını inceleyebilirsiniz. Log dosyaları genellikle şu konumda bulunur:

/var/log/postgresql/postgresql-<version>-main.log

Arşiv dosyalarını saklayacağınız bir dizin oluşturun:

mkdir -p /path/to/archive/directory

c: PostgreSQL Sunucusunu Yeniden Başlatma

Yapılandırma dosyasındaki değişikliklerin etkinleştirilmesi için PostgreSQL'i  yeniden başlatın:

sudo systemctl restart postgresql

WAL Geri Yükleme (Restore)

a: Veritabanını Kapatma

PostgreSQL sunucusunu kapatın:

sudo systemctl stop postgresql

b: recovery.conf Dosyasını Oluşturma

PGDATA dizininde (/var/lib/postgresql/data gibi) bir recovery.conf dosyası oluşturun ve aşağıdaki içeriği ekleyin:

restore_command = 'cp /path/to/archive/directory/%f %p'
recovery_target_time = '2024-10-26 22:00:00'
  • restore_command: WAL dosyalarını belirtilen arşiv dizininden kopyalar.
  • recovery_target_time: Belirli bir tarihe kadar olan tüm verileri geri yükler.

c: Veritabanını Başlatma

PostgreSQL sunucusunu tekrar başlatın

sudo systemctl start postgresql

Notlar:

  1. PostgreSQL Versiyonu: PostgreSQL 12 ve sonrası sürümlerde recovery.conf dosyası yerine recovery.signal dosyası kullanılır.
  2. Tam Yedekleme ile Kullanım: WAL arşivlemeyi tam yedeklemelerle birlikte kullanmak en iyi uygulamadır.
  3. İzinler: WAL dosyalarının saklandığı dizinlerin PostgreSQL kullanıcısının erişim iznine sahip olduğundan emin olun.
This post is licensed under CC BY 4.0 by the author.