16 Mart • 15 dakikalık okuma
PostgreSQL veritabanında yedek almak için üç farklı yöntem bulunur;
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.
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;
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;
pg_dump veritabani_ismi --clean > dosya_ismi.sql
cat dosya_ismi
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.
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.
pg_dump veritabani_ismi --create > dosya_ismi.sql
SQL çıktı dosyasını .tar biçiminde oluşturmak için; -Ft parametresi yazılır.
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.
pg_dump -Fc --clean -f melihsafrancomdb.tar melihsafrancomdb
Tüm parametreleri görmek için;
pg_dump --help
Tüm veritabanı grubunun yedeğini almak için;
pg_dumpall -f ./postgres-cluster-full-backup.sql
Tüm parametreleri görmek için;
pg_dumpall --help
Örnek veritabanı verileri siliniyor;
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.
psql -d veritabani_ismi -f dosya_ismi.sql
.tar biçiminde oluşturulmuş yedekleme dosyasını geri yüklemek için; -Ft parametresi yazılır.
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.
pg_restore -Fc -d melihsafrancomdb melihsafrancomdb.tar
Geri yüklenen verileri kontrol için veritabanına girilir ve ilgili veriler sorgulanır;
pg_dumpall komutu ile alınan yedekleri geri yüklemek için psql komutu kullanılır;
psql -f ./postgres-cluster-full-backup.sql
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 sunucusunun veritabanları sakladığı dizininin yedeği alınır;
tar -cf backup.tar veritabani_dizini
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;
PostgreSQL konfigürasyon dosyası güncellenir;
sudo nano postgres_config_dosyasi
PostgreSQL servisi yeniden başlatılır;
systemctl restart postgresql@<postgres_version>-<cluster_name>.service
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.
PostgreSQL pg_basebackup komutu başlatılır;
Örneğin; Tablo verileri siliniyor;
Geri yükleme için servis durdurulur. Yedeklenen dizin postgreSQL dizinine taşınır. Servis başlatılır.
systemctl stop postgresql@<postgres_version>-<cluster_name>.service
systemctl start postgresql@<postgres_version>-<cluster_name>.service