PostgreSQL veritabanında yedek almak için üç farklı yöntem bulunur;

  1. SQL Çıktısı
  2. Dosya Sistem Seviyesi Yedekleme
  3. Sürekli Yedekleme

SQL Çıktısı

SQL Çıktısı (ing.: SQL Dump), yöntemi ile yedeklenmek istenen veritabanı verileri ve şeması SQL komutları olarak bir dosyaya yazılır. Bu yöntem ile yedek almak mantıksal yedekleme olarak adlandırılır ve pg_dump komutu kullanılır.

SQL Çıktısı Yöntemi İle Veritabanı Yedeği Almak

Yedek almak için postgres veritabanına bağlanılıp veritabanları \list veya \l komutu ile listelenir.

Örneğin terminal ekranından postgres veritabanına bağlandıktan sonra; yedek alınacak veritabanı oluşturuluyor;

Yeni veritabanı oluşturmak
Resim 1. Yeni veritabanı oluşturmak
Yeni tablo oluşturma ve yeni kayıt eklemek
Resim 2. Yeni tablo oluşturma ve yeni kayıt eklemek

Yedek alınacak veritabanı ismi belirlendikten sonra postgres veritabanından \q komutu ile çıkılır ve terminal ekranına dönülür; pg_dump komutu ile veritabanı adı ve çıktı dosyası adı yazılarak çalıştırılır.

Geri yükleme esnasında mevcut nesnelerin silinip tekrar oluşturulması için --clean ya da -c parametresi yazılır;

Kod

pg_dump veritabani_ismi --clean > dosya_ismi.sql

pd_dump komutu ile yedek almak
Resim 3. pd_dump komutu ile yedek almak
Kod

cat dosya_ismi

SQL dump dosya içeriği
Resim 4. SQL dump dosya içeriği

Sadece verilerin yedeğini almak için --data-only ya da -a parametresi yazılır. Sadece şema yedeğini almak için --schema-only ya da -s parametresi yazılır.

Kod

pg_dump veritabani_ismi --data-only > dosya_ismi.sql

Geri yüklemeden önce veritabanını oluşturmak için; --create ya da -C parametresi yazılır.

Kod

pg_dump veritabani_ismi --create > dosya_ismi.sql

SQL çıktı dosyasını .tar biçiminde oluşturmak için; -Ft parametresi yazılır.

Kod

pg_dump -Ft --clean -f melihsafrancomdb.tar melihsafrancomdb

SQL çıktı dosyasını sıkıştırılmış biçiminde oluşturmak için; -Fc parametresi yazılır.

Kod

pg_dump -Fc --clean -f melihsafrancomdb.tar melihsafrancomdb

Tüm parametreleri görmek için;

Kod

pg_dump --help

Tüm veritabanı grubunun yedeğini almak için;

Kod

pg_dumpall -f ./postgres-cluster-full-backup.sql

Tüm parametreleri görmek için;

Kod

pg_dumpall --help

SQL Çıktısı Yöntemi İle Veritabanını Geri Yüklemek

Örnek veritabanı verileri siliniyor;

Örnek veritabanı verilerini silmek
Resim 5. Örnek veritabanı verilerini silmek

Alınan yedekleri geri yüklemek; pg_dump komutu ile düz yazı Fp biçiminde alınan yedekleri geri yükleme için psql komutu kullanılır; Özel Fc, tar Ft veya dizin Fd biçiminde alınan yedekleri geri yüklemek için pg_restore komutu kullanılır.

Kod

psql -d veritabani_ismi -f dosya_ismi.sql

SQL dump dosya ile veritabanına geri yükleme yapmak
Resim 6. SQL dump dosya ile veritabanına geri yükleme yapmak

.tar biçiminde oluşturulmuş yedekleme dosyasını geri yüklemek için; -Ft parametresi yazılır.

Kod

pg_restore -Ft -d melihsafrancomdb melihsafrancomdb.tar

Sıkıştırılmış biçimli yedekleme dosyasını geri yüklemek için; -Fc parametresi yazılır.

Kod

pg_restore -Fc -d melihsafrancomdb melihsafrancomdb.tar

Geri yüklenen verileri kontrol için veritabanına girilir ve ilgili veriler sorgulanır;

Geri yüklenen veriler
Resim 7. Geri yüklenen veriler

pg_dumpall komutu ile alınan yedekleri geri yüklemek için psql komutu kullanılır;

Kod

psql -f ./postgres-cluster-full-backup.sql

Dosya Sistem Seviyesi Yedekleme

Dosya Sistem Seviyesi Yedekleme yöntemi fiziksel yedekleme olarak adlandırılır. Yedekleme yapmak için veritabanı sunucusunun kapatılması gerekmektedir. Bu nedenle kullanışlı değildir. Sonrasında veritabanı dosyalarının bulunduğu dizin fiziksel olarak kopyalanabilir ve yedeklenebilir. Dosya sistem seviyesi yedekleme yöntemi ile tüm veritabanının yedeği alınır ve geri yükleme yapılabilir.

Postgres sunucusunun veritabanları sakladığı dizini bulmak için terminalden postgres veritabanına bağlanılır ve show data_directory komutu çalıştırılır;

Postgres veritabanları dizini
Resim 8. Postgres veritabanları dizini

Postgres sunucusunun veritabanları sakladığı dizininin yedeği alınır;

Kod

tar -cf backup.tar veritabani_dizini

Postgres veritabanları dizini yedeklenmesi
Resim 9. Postgres veritabanları dizini yedeklenmesi

Sürekli Yedekleme

Sürekli Yedekleme yöntemi, Dosya Sistem Seviyesi Yedekleme ile benzerlik gösterir. Bu yöntemin kullanılabilmesi için Sürekli Arşivleme modu açılmalıdır. Bu yöntem ile tüm veritabanının yedeği alınır ve geri yükleme yapılabilir. pg_basebackup komutu ile kullanılır.

Bu yöntemi kullanmak için PostgreSQL konfigürasyon dosyası güncellenerek postgres veritabanı arşiv modu açılmalı, write-ahead logging (wal) seviyesi replica yapılmalıdır ve yedek alınacak dizin arşiv komutu yazılmalıdır.

PostgreSQL konfigürasyon dosyasını bulmak için terminalden postgres veritabanına bağlanılır ve show config_file komutu çalıştırılır;

Postgres config dosyası dizini
Resim 10. Postgres config dosyası dizini

PostgreSQL konfigürasyon dosyası güncellenir;

Kod

sudo nano postgres_config_dosyasi

  1. wal_level = replica
  2. archive_mode = on
  3. archive_command = 'cp %p /archive_folder/%f'
  4. max_wal_senders = 10
  5. wal_keep_size = 512

Postgres config dosyası güncellemeleri
Resim 11. Postgres config dosyası güncellemeleri

PostgreSQL servisi yeniden başlatılır;

Kod

systemctl restart postgresql@<postgres_version>-<cluster_name>.service

Postgres servis yeniden başlatma
Resim 12. Postgres servis yeniden başlatma

PostgreSQL servisi yeniden başlatdıktan sonra değiştirilen alanlar servis tarafından güncellenmediyse; system alter komutu ile değiştirilir ve servis tekrar başlatılır.

Postgres system alter komutu ile konfigürasyon güncelleme ve servis yeniden başlatma
Resim 13. Postgres system alter komutu ile konfigürasyon güncelleme ve servis yeniden başlatma

PostgreSQL pg_basebackup komutu başlatılır;

Postgres pg_basebackup
Resim 14. Postgres pg_basebackup

Örneğin; Tablo verileri siliniyor;

Postgres tablo verilerinin silinmesi
Resim 15. Postgres tablo verilerinin silinmesi

Geri yükleme için servis durdurulur. Yedeklenen dizin postgreSQL dizinine taşınır. Servis başlatılır.

Kod

systemctl stop postgresql@<postgres_version>-<cluster_name>.service

systemctl start postgresql@<postgres_version>-<cluster_name>.service

Postgres kurtarılan verinin kontrol edilmesi
Resim 16. Postgres kurtarılan verinin kontrol edilmesi

Kaynaklar

  1. PostgreSQL Backup and Restore , postgresql.org, 10.03.2024 tarihinde alındı.
  2. PostgreSQL pg_dump & pg_restore Guide , simplebackups.com, 10.03.2024 tarihinde alındı.
  3. PostgreSQL Backup , postgresqltutorial.com, 10.03.2024 tarihinde alındı.
  4. File System Level Backup , postgresql.org, 10.03.2024 tarihinde alındı.
  5. Postgres Backup and Recovery Best Practices , EDBPostgres, youtube.com, 10.03.2024 tarihinde alındı.
  6. Where does PostgreSQL store configuration/conf files? , stackoverflow.com, 16.03.2024 tarihinde alındı.
  7. systemctl: filter by a pattern in unit names , unix.stackexchange.com, 16.03.2024 tarihinde alındı.
  8. How to restart PostgreSQL in Ubuntu 18.04 , stackoverflow.com, 16.03.2024 tarihinde alındı.
  9. Postgresql config parameters not reflecting even after service restart , stackoverflow.com, 16.03.2024 tarihinde alındı.
  10. Can't get new postgres config file settings to take effect , stackoverflow.com, 16.03.2024 tarihinde alındı.
  11. #19 Changes that require a reboot in PostgreSql , Rajneesh Verma, linkedin.com, 16.03.2024 tarihinde alındı.
  12. pg_basebackup , postgresql.org, 16.03.2024 tarihinde alındı.
  13. PostgreSQL Backups: What is pg_basebackup? , severalnines.com, 16.03.2024 tarihinde alındı.
  14. PostgreSQL Physical Backups Using pg_basebackup: A Comprehensive Guide , stormatics.tech, 16.03.2024 tarihinde alındı.
  15. PPostgresql 9.5 installation - Config owner (postgres:105) and data owner (ubuntu:1000) do not match, and config owner is not root , stackoverflow.com, 16.03.2024 tarihinde alındı.


Beğen