5 Nisan 2013 Cuma

PostgreSQL binary yedek alma

Bir müşterimizin 100GB civarı PostgreSQL veritabanı vardı. Standart pg_dump komutu ile yedek alındığında yedek alma süresi 24 saate kadar uzayabilmekteydi. Sonrasında binary backup ile testler yaptığımızda bu sürenin 2 saate düştüğünü gözlemledik. Burada kısaca binary yedek nasıl alınır ve geri yüklenir ondan bahsedeceğim. Örnekler PostgreSQL 9.2 üzerinde uygulanmıştır.

pg_dump -F parametresi yedek türünü belirler.

p: plain(düz)  yedek anlamına gelir. Ön tanımlı yedek türü budur.  Yedek SQL metin dosyası formatındadır.

Örnek:
# pg_dump -U ssm -F t -b -v -f ssm.dbbackup ssm

Dosyanın türüne file  komut ile baktığımızda metin olarak gözükmektedir.

# file ssmdb.backup ssmdb.backup: UTF-8 Unicode English text, with very long lines

c: custom (özel) yedektir. Bu fomat bize esneklik sağlıyor. Yedekten sadece bir tablo veya index
dönebiliyoruz. Ön tanımlı olarak yedek sıkıştırılmaktadır.

# pg_dump -U ssm -F c -b -v -f ssmdb.backup ssm
pg_dump: reading schemas
pg_dump: reading user-defined tables
pg_dump: reading extensions
pg_dump: reading user-defined functions
pg_dump: reading user-defined types
pg_dump: reading procedural languages

 ..
 
# file ssmdb.backup
ssmdb.backup: PostgreSQL custom database dump - v1.12-0



d: directory(dizin) Yedekler bir dizin altında oluşmaktadır. Ön tanımlı olarak arşiv sıkıştırılır.











# pg_dump -U ssm -F d -b -v -f ssmbackupdir ssm
# ls -al ssmbackupdir/
total 360K
drwx------  2 root root 4.0K Apr  5 10:53 .
dr-xr-x--- 11 root root 4.0K Apr  5 10:53 ..
-rw-r--r--  1 root root  230 Apr  5 10:53 2859.dat.gz
-rw-r--r--  1 root root 295K Apr  5 10:53 2861.dat.gz
-rw-r--r--  1 root root 5.0K Apr  5 10:53 2863.dat.gz
-rw-r--r--  1 root root   29 Apr  5 10:53 2865.dat.gz
-rw-r--r--  1 root root   25 Apr  5 10:53 2866.dat.gz
-rw-r--r--  1 root root   29 Apr  5 10:53 2868.dat.gz
-rw-r--r--  1 root root   29 Apr  5 10:53 2869.dat.gz
-rw-r--r--  1 root root  307 Apr  5 10:53 2870.dat.gz
-rw-r--r--  1 root root   29 Apr  5 10:53 2872.dat.gz
-rw-r--r--  1 root root  15K Apr  5 10:53 toc.dat



t: tar tar arşivleme formatında yedek alır. Dizin formatındakinin arşivlenmiş hali gibi düşünülebilir.  Bu yöntemde yedekler sıkıştırılmz.

# pg_dump -U ssm -F t -b -v -f ssmtar.backup ssm
# file ssmtar.backup
ssmtar.backup: tar archive


tar dosyasnının içeriği aşağıdaki gibidir.

# tar tvf 
# tar tvf ssmtar.backup
-rw------- 2048/1024     14416 2013-04-05 11:05 toc.dat
-rw------- 2048/1024       489 2013-04-05 11:05 2859.dat
-rw------- 2048/1024    895755 2013-04-05 11:05 2861.dat
-rw------- 2048/1024     19287 2013-04-05 11:05 2863.dat
-rw------- 2048/1024         9 2013-04-05 11:05 2865.dat
-rw------- 2048/1024         5 2013-04-05 11:05 2866.dat
-rw------- 2048/1024         9 2013-04-05 11:05 2868.dat
-rw------- 2048/1024         9 2013-04-05 11:05 2869.dat
-rw------- 2048/1024       573 2013-04-05 11:05 2870.dat
-rw------- 2048/1024         9 2013-04-05 11:05 2872.dat
-rw------- 2048/1024     13065 2013-04-05 11:05 restore.sql


 
Yukarıdaki restore.sql dosyasında veritabanında tek tek tüm indeks,tablo vs kayıtlır silinip tekrar oluşturulmaktadır.


 pg_restore

pg_restore komutu ile de yedekleri dönebilirsiniz.  pg_restore ile komutu dönerken yedek formatını belirtmeye gerek yoktur. Programın kendisi otomatik olarak formatı tanımaktadır.

Aşağıdaki komutla yukarıdaki yedeklerden birini dönebilirsiniz. Örnek olarak tar formatlı yedek geri dönüşü gösterilmiştir.


# pg_restore -U ssm -v -f ssmtar.backup ssm




Hiç yorum yok:

Yorum Gönder