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