Postgresql Point-in-Time Recovery (RECOVERY.CONF )

Postgresql Point-in-Time Recovery (RECOVERY.CONF ),  postgresql de recovery.conf dosyasının içerisine yazılan parametreler ile sağlanmaktadır.

Önceki yazılarımda postgresql’in yedekleme araçlarından bahsetmiştim. Bu yazımda pg_basebackup yöntemi (detaylı bilgi için pg_basebackup isimli yazıma göz atabilirsiniz) ile postgresql clusterın yedeğini alarak aynı sunucu üzerinde farklı bir klasöre dosyaları açacağız ve belirtilen zamana geri döneceğiz.

Point-in time recovery yapmak ve belirtilen zamana veya belirtilen transactionid e dönebilmek için önce archive_command ile ilgili parametreleri konfigüre etmemiz gerekiyor.

archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/11/data/archive/%f'

Archive_mode  açıldıktan sonra  archive_command kısmında belirtilen klasöre archivelar yazılmaya başlayacaktır fakat bunun için aşağıdaki şekilde servisimizi restart ediyoruz.

systemctl restart postgresql-11.service

Yukarıdaki parametreler için postgresql servisini yeniden başlattıktan sonra archiveların yazıldığından ve  postgresql loguna archive ile ilgili hatalar düşmediğini gördükten sonra point -in time recovery senaryomuza başlayabiliriz.

İlk olarak test adında veritabanı oluşturalım  ve bu veritabanı üzerinde işlem yapalım.

Create database test;

Test veritabanını oluşturduktan sonra bu veritabanın içerisine basit bir tablo oluşturarak  kayıt girelim.

Create table restored1(a int);

Restored1 adında oluşturduğumuz tabloya verilerimizi girelim.

İnsert into restored1(a) select 1;
İnsert into restored1(a) select 2;
İnsert into restored1(a) select 3;
İnsert into restored1(a) select 4;

Verilerimizi de ekledikten sonra pg_basebackup ile clusterımızın yedeğini alalım.

pg_basebackup -p 5433 -Ft -D /var/lib/pgsql/11/data/

Clusterımızı point-in time olarak geri döneceğimiz klasörü oluşturuyoruz.

Mkdir /var/lib/pgsql/11_1

Oluşturduğumuz kullanıcıya postgresql için gerekli olan yetkilendirmeleri yapıyoruz.

Chown -R postgres:postgres /var/lib/psql/11_1/
Chmod -r  750 /var/lib/pgsql/11_1/

Yetkilendirmeyi yaptıktan sonra aşağıdaki gibi yedeğimizi dönüyoruz.

tar xvf base.tar -C /var/lib/pgsql/11_1/
tar xvf pg_wal.tar -C /var/lib/pgsql/11_1/pg_wal/

Verilerimizi çıkardıktan sonra  restore yapılan sunucu üzerinde farklı bir postgresql çalışıyorsa port çakışmaması ve konfigürasyonlar ile ilgili problem yaşanmaması için postgresql.conf da değiştirilen parametrelere göz atmanız gerekebilir.

Postgresql.conf,postgresql.auot.conf parametreleri düzgün konfigure edildiğini varsayarak devam ediyoruz.

Aşağıdaki şekilde recovery.conf dosyamızı oluşturuyoruz.(RECOVERY.CONF dosyası postgresql 12 versiyonundan sonra kaldırılmış ve postgresql.conf içerisine dahil edilmiştir.)

touch /var/lib/pgsql/11_1/recovery.conf

Recovery.conf içerisine aşağıdaki parametreleri giriyoruz.

restore_command = 'cp /var/lib/psql/11_1/data/archive/%f "%p"'
recovery_target_time = '2021-03-12 02:50:08'
  • restore_command : archiveların yazıldığı dizin restore sırasında archiveları kullanarak belirtilen zamana dönmek için kullanılır.
  • recovery_target_time: Belirtilen zaman dilimine dönmek için kullanılır.

Yukarıdaki  parametrelere ek olarak recovery.conf dosyasına aşağıdaki parametrelerde eklenebilir.

  • recovery_target = ‘immediate’  :  Restore işleminin tutarlı bir durumda tamamlanması için kullanılır.
  • Recovery_target_name:  pg_create_restore_point(point_ismi) komutu ile belirtilen point e dönmek için kullanılır.
  • recovery_target_xid : Belirtilen xid e dönmek için kullanılır.
  • recovery_target_action : recover işlemi tamamlandıktan sonra alacağı shutdown,promote,pause parametrelerine göre işlem yapmak için kullanılır.

 

Açıklamaları yaptıktan sonra aşağıdaki gibi servisimizi başlatıyoruz.

 /usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11_1/ start

Psql ile bağlanarak clusterımızın belirtilen saatteki haline geri döndüğünü görebiliriz.

**DİKKAT**

Postgresql13 ile recovery.conf dosyası kaldırılmıştır. Recovery.conf parametreleri postgresql.conf içerisine entegre edilmiştir.

Loading