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:
- PostgreSQL Versiyonu: PostgreSQL 12 ve sonrası sürümlerde
recovery.conf
dosyası yerinerecovery.signal
dosyası kullanılır. - Tam Yedekleme ile Kullanım: WAL arşivlemeyi tam yedeklemelerle birlikte kullanmak en iyi uygulamadır.
- İzinler: WAL dosyalarının saklandığı dizinlerin PostgreSQL kullanıcısının erişim iznine sahip olduğundan emin olun.