postgresql pg_probackup

PostgreSQL  yedekleme araçlardan birisi olan pg_probackup  ,postgrespro tarafından geliştirilen open source ve enteprise yedekleme çözümlerinden birisidir.

pg_probackup ile aşağıdaki özellikler kullanılabilmektedir.

  • Paralel yedekleme ve geri yükleme,
  •  Local ve remote backup almak,
  •  Full,inceremental, differential backup almak,
  • Page checksum,
  • Deduplication,
  • Secondary sunucudan yedek almak,

Pg_probackup yönteminde iki farklı yedekleme çözümü vardır. Bunlardan birisi ARCHIVE diğeri STREAM yöntemidiri.

Pg_probackup ARCHIVE Yöntemi:  Bu yöntem wal ve archive sayesinde sürekli yedekleme yapılır ve PITR yapılabilir.

Pg_probackup STREAM Yöntemi: Bu yöntemde archive modu açılmadan yedek alınabilir fakat yedeklemenin alındığı anki haline dönmek için kullanılır. Archive durumuna bakılmaksızın  tutarlı bir restore için WAL segmentleri yedekleme sırasında replikasyon yöntemini kullanarak yedeklemeye dahil edilir.

Bu yazımda Pg_probackup ARCHIVE Yöntemi ile postgresql ‘in 12 versiyonuna göre yedek almadan bahsedeceğim.

Pg_probackup yedekleme çözümünde FULL,DELTA ,PAGE  ,PGTRACK yedekleme çözümleri bulunmaktadır.

 

FULL:  Veritabanın full yedeğini alır.

DELTA:  Full yedeklemeden sonra ki farkları almak için kullanılır.

PAGE:  Bu modda arşivdeki tüm wal dosyalarını inceleyerek FULL VE DELTA dan sonra alınan backupların farkını alır. Bu özelliği kullanabilmek için  archive modu açmanız gerekmektedir.

PGTRACK : Postgrespro tarafından geliştirilen extensiondır. Bu extension sayesinde arşivlemeye gerek yoktur. Bir sayfa değiştirildiğinde eklendiğinde pgtrack tarafında işaretlenir  ve bunun sayesinde archive mod açılmadan işlem yapılır.

İlk olarak rpm komutu ile repoyu indiriyoruz.

rpm -ivh https://repo.postgrespro.ru/pg_probackup-forks/keys/pg_probackup-repo-forks-rhel.noarch.rpm

Repo indirildikten sonra aşağıdaki komut yardımı ile pg_probackup12  kuruyoruz.

Yum install olarak kurmak istemeyenler için aşağıdaki gibi paketi derleyerek kurulum yapabilirler.

cd postgresqlin_yetkili_olduğu_dizin && git clone https://github.com/postgrespro/pg_probackup contrib/pg_probackup && cd contrib/pg_probackup && make

Kurulum yapıldıktan sonra aşağıdaki gibi kullanacağımız backupın alınacağızı dizini belirtiyoruz.

pg_probackup-12 init -B /home/postgres/pgprobackup/

İnitiliaze edildikten sonra postgresql instancenın yerini belirtiyoruz.

pg_probackup-12 add-instance -B /home/postgres/pgprobackup/ -D /var/lib/pgsql/12/data/ --instance pgprobackuptest1

 

-B parametresi : Yedeğin alınacağı dizin,

-D parametresi :  postgresql data dizini

–instance  parametresi : belirtilen data dizinin de belirtilen cluster’a ve pg_probackup tarafında tanımlanan isim.

superuser ile işlem yapılmaktadır fakat superuser vermeden yedek almak için aşağıdaki gibi konfigurasyon yapabiliriz.

CREATE ROLE backup WITH LOGIN;
GRANT USAGE ON SCHEMA pg_catalog TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_xlog() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;

Yukarıdaki yetkiler verildikten sonra pg_hba.conf üzerinden de değişiklik yapılması gerekmektedir.

Pg_probackup üzerinde clusterımızı “pgprobackuptest1” adında tanımladık. Pg_probackup da archive yedekleme çözümünü kullanacağımızdan dolayı postgresql.conf üzerinde aşağıda belirtilen yerleri değiştiriyoruz.

archive_command=on
archive_command = 'pg_probackup-12 archive-push -B /home/postgres/pgprobackup/ --instance pgprobackuptest1 --wal-file-name=%f var/lib/pgsql/12/archive/ ' 

Yukarıdaki parametreleri değiştirdikten sonra aşağıdaki gibi servisi restart ediyoruz.

systemctl restart postgresql-12.service

Servisimizi restart ettikten sonra aşağıdaki komutlar yardımı ile FULL,DELTA ,PAGE  backuplar alabilirsiniz

pg_probackup full backup :

pg_probackup-12 backup -B /home/postgres/pgprobackup/ --instance pgprobackuptest1 -b FULL

pg_probackup DELTA backup :

pg_probackup-12 backup -B /home/postgres/pgprobackup/ --instance pgprobackuptest1 -b DELTA 

pg_probackup PAGE backup :

pg_probackup-12 backup -B /home/postgres/pgprobackup/ --instance pgprobackuptest1 -b PAGE

pg_probackup backup control :

pg_probackup-12 show -B /home/postgres/pgprobackup/ --instance pgprobackuptest1

Yedeğini aldığımız clusterı başka bir klasöre restore etmek için aşağıdaki komutu kullanabilirsiniz.

pg_probackup-12 restore -B /home/postgres/pgprobackup/ -D /var/lib/pgsql/12_restore/ --instance pgprobackuptest1 -R -I lsn


 

Loading