2011-06-14 31 views
6

Aşağıdaki komutla bir cron işinden her gece yedeklenen bir postgresql veritabanımız var:Postgresql yedeğinin başarılı olup olmadığı nasıl kontrol edilir?

su postgres -c "pg_dump our_database | gzip > /home/smb/shared/database_backup.bak.gz" 

son zamanlarda birkaç bozuk sektörle başlayan bir disk hatası oluştu ve bu süre boyunca pg_dump aşağıdaki hatalardan çıkmış oldu

pg_dump: SQL command failed 
pg_dump: Error message from server: ERROR: catalog is missing 17 attribute(s) from relid 20158 
pd_dump: The command was: LOCK TABLE public.obvez IN ACCESS SHARE MODE 

Şimdi, cron işindeyken, kimse hata mesajlarını fark etmedi, yedek kesintiye uğradı ama sıfır büyüklükte değildi, her şey iyi görünüyordu ve hata gerçekleşmediklerinde hata farkına varıncaya kadar fark ettik. Yedekleme yok.

Eski bir yedeklemeden verileri geri almayı başardık ancak şimdi pg_dump'un işini başarı ile bitirip bitirmediğini kontrol etmenin uygun yolunun ne olacağını bilmek ister misiniz?

+0

http bu sormalısınız: Eğer bir terslik durumunda e-mail göndermek istiyorsanız, pg_dump dönüş kodunu kontrol edebilirsiniz // Bunun yerine DBA.stackexchange.com. StackOverflow programlama içindir. – Jonas

+0

@Jonas Bu burada kalmalı. OP, hataları kontrol etmenin bir yolunu soruyor. Veritabanını otomatik hale getirmeye çalışıyor, ama bu hemen hemen her şey için geçerli olabilir, bu yüzden göremiyorum çünkü neden bu DBA'ya taşınmalı. – alexandernst

cevap

8

ben bir günlük dosyası içine sonucunu yazmak ve cronjob sonunda, benim e-posta adresine günlük dosyasının içeriğini göndermek. Bu şekilde, bir şeylerin yanlış gittiğini anlayacağım.

su postgres "pg_dump our_database 2>> $LOG_FILE | gzip > /home/smb/shared/database_backup.bak.gz" 
cat $LOG_FILE | mailx $MAINTAINERS -s "Postgresql backup" 

REVİZE EK:

LOG_FILE=/tmp/pgdump.err 

if ! pg_dump -U backupuser "our_database" 2> $LOG_FILE 
then 
    cat $LOG_FILE | mailx 'youremailaddress' -s "Postgresql backup failure!" 
fi 
+1

Sorun şu ki, bu veritabanı aslında müşterinin sitesinde ve bir günlük dosyasını nasıl okuyacaklarını bileceklerinden eminim. Sanırım bunu değiştirebilir ve bir şey yanlış giderse e-posta gönderebilirim. –

+1

@Dragan Matic: Ah, orijinal mesajında ​​bunu söylemedin. Posta gönderim örneğini yalnızca pg_dump'ın "0" dışında bir şey döndürdüğü zaman genişletdim (bu başarı). Ayrıca, yedeklemeye izin verilen özel bir "yedek kullanıcı" kullanmayı düşünün ve sudo yerine .pgpass kullanın. Eh, en azından, eğer yardımcı olabilirsem sudo istemiyorum;) –

İlgili konular