Postgres'te her saat artımlı yedekleme nasıl yapılır?


18

Tek bir Postgres sunucusunun saatlik artımlı yedekini yapmaya çalışmak (Win7 64).

Aşağıdaki kurulum var postgresql.conf:

max_wal_senders = 2
wal_level       = archive
archive_mode    = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'

(tekrar başlat)

İle temel bir yedekleme yaptım pg_basebackup -U postgres -D ..\foo -F t -x

Hangi klasörde büyük bir base.tardosya yaptı foove bazı 16,384 KB dosyaları ekledi, ki ben WALs olduğunu varsayalım.

Anlamadığım şey , WAL'ların neden foodeğişmediğidir . Değişen WAL'lar data/pg_xlog. Pg'nin bunları kopyalaması gerekmez mi? Bunu yapmaya nasıl karar veriyor?

Belki de ayarlamam gerekir archive_timeout=3600?

Pg_start_backup () ve pg_stop_backup () çağırmanız gerektiğini söyleyen birkaç site (pg'nin posta listeleri, bacula'nın postgres sayfası) gördüm, ancak bunların gerekli olmadığına inanıyorum. Bu doğru mu?

İkincil sorular:

  1. WAL'ler ne sıklıkla data/pg_xlogyazılıyor? Bir yazmayı ne tetikler?

    Ben \qpsql sonra bazı DML yaparsanız bir WAL güncelleme gibi görünüyor . Veya pgAdmin'de bir tablo düzenleyin ve ardından pencereyi kapatın. Taahhüt üzerine yazacağını düşündüm.

  2. En iyi uygulamalar? pg_basebackup haftada bir kez mi? WAL'leri PG veya uzak bir makineyle aynı makineye arşivle?

Yanıtlar:


5

Arşiv klasörünün uzaktan depolamaya artımlı bir yedeğini almak istiyorsunuz.

Yedeklemeden geri yüklemeniz gerekiyorsa, temel senaryo, başlangıç ​​noktası olarak temel yedeklemenize ve başlangıç ​​noktası ile kilitlenme arasında gerçekleşen işlem etkinliğini yeniden yürütmek için arşiv klasörünün tüm içeriğine ihtiyaç duymanızdır.

Ayrıca arşiv klasöründeki dosyaların sonsuza kadar birikmesini önlemek için, zaman zaman yeni bir temel yedekleme yapmak ve yeni temel yedeklemeden önce arşivlenen dosyaları silmek istersiniz.


Teşekkürler. Birkaç soru: 1. Ben pg_start_backup (), veri kopyalayın, sonra pg_stop_backup () veya pg_start_backup (); pg_stop_backup (), sonra kopyalansın mı?
Neil McGuigan

@Neil: 1. ve 2. kullandığınızda geçerli değil pg_basebackup, zaten bununla ilgileniyor. 3. postgres pg_logartık ihtiyaç duyulmadığında WAL dosyalarını otomatik olarak siler . Elle hiçbir şey yapmamalısınız pg_log. Aksi takdirde wal_keep_segmentsparametreye bakın
Daniel Vérité

"arşiv" klasörüyle pg_xlog demek, evet?
Neil McGuigan

@NeilMcGuigan: hiç de değil. Arşiv klasörü, arşiv komutunuzun hedef klasörüdür, örneğin burada "c: \ postgres \ foo". pg_xlogtamamen otomatik olarak postgres tarafından yönetilirken, arşiv klasörü tamamen DBA tarafından yönetilir.
Daniel Vérité

Sanırım kafam karıştı çünkü ilk pg_basebackup sonrasında foo'daki WAL'ler asla değişmiyor
Neil McGuigan

8

Size çok yardımcı olacak mevcut bir araç var, WAL-E . PITR'den S3'e bir archive_commandve sağlar restore_command.

Orada hiçbir yapmak komutlar artışlı veya diferansiyel mantıksal yedeklemeler. pg_dumpartımlı veya farklı olamaz. Bunu yapmanın tek yolu günlük arşivlemektir.

Teorik olarak, yeni bir tam yedek alabilir, son yedek arasında bir ikili fark yapabilir ve fark yükleyebilirsiniz. Bu beni bir şeyler yapmak için kırılgan ve verimsiz bir yol olarak vuruyor ve gerçekten tavsiye etmem.

Ayrıca, PgBarman, kanca komut dosyaları aracılığıyla S3 ile entegrasyonu destekler ve sizin için yedekleme rotasyonunun ve yönetiminin çoğunu otomatik hale getirir. Yine, bu Windows'da bir seçenek olmayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.