PostgreSQL, WAL etkin bir yedeklemenin ortasında Kontrol Noktalarını nasıl işler?


17

PostgreSQL v9.0'da çalışan bir WAL arşivleme sistemim var. Bu nedenle WAL, düzenli olarak arşivlenir (3 WAL oluşturulduğunda veya bir WAL 15 dakikadan eskiyse).

Şimdi PG_DATA dizininin ikili paketini ekliyorum (pg_xlog alt dizini hariç). Bunu yapmak için bir pg_start_backup(),ikili kopya ve a pg_stop_backup().

Ben pg_start_backup ve pg_stop_backup ne yaptığını oldukça iyi anlıyorum, ilki bir kontrol noktası yapmak ve sonuncusu son WAL dosyasının arşivlenmiş olmasını sağlamak.

Gönderen Resmi belgelerin ikili veri we should kopyalamak için bunu görebilirsiniz:

Tar veya cpio (pg_dump veya pg_dumpall değil) gibi uygun bir dosya sistemi yedekleme aracını kullanarak yedeklemeyi gerçekleştirin. Bunu yaparken veritabanının normal çalışmasını durdurmak ne gerekli ne de istenen bir durumdur.

Bu yüzden oldukça şaşkınım. Bu, kopya oluşturulurken bir Checkpoint'in gerçekleştirilebileceği anlamına gelir. Kopyalama komutunun kopyayı gerçekleştirirken veri değişikliklerine izin vermesi gerektiğini belirten bir sürü belge gördüm, bununla birlikte, doğru aracı bulma konusunda basitim. Ama sorum, postgreSQL'in kurtarma işlemini bazı tutarsız dosyaları içeren bir pg_data içeriğiyle nasıl halledeceğidir (bazıları kontrol noktasından önce, bazıları sonradan)?

Postgresql işlem günlüklerini yeniden oynatarak tüm bu dosyaları doğru duruma getirebilecek mi? Yedekleme yaparken tablo oluşturma ve bırakma işlemlerinin tehlikeli olduğunu gördüm, vakum komutları gibi tehlikeli işlemler yok mu? Pg_backup vakum işlemlerini askıya alıyor mu? İkili kopyalama işleminin başlangıcında global / pg_control dosyasının bir kopyasını yapmalı mıyım? Daha hızlı bir geri yükleme işlemi almak için anlık görüntü özellikli bir dosya sistemi (xfs-freeze gibi) kullanmalı mıyım?

Bir yedekleme komut dosyası çökmesinin otomatik olarak bir pg_stop_backup başlatmayacağını gördüm, bu yüzden yedekleme durumumun uzun bir süre (nagios'um pg_stop_backup () düzeltmek için bir yerde çalıncaya kadar) yaşama şansı var. Bu iki komedi arasında PostgreSQL'de farklı bir şey varsa, bunun ne gibi bir etkisi olabileceğini anlamak istiyorum.

Aydınlat lütfen.

Yanıtlar:


7

Sen sordun:

postgreSQL'in kurtarmayı, tutarsız bazı dosyaları içeren bir pg_data içeriği ile nasıl işleyeceği.

pg_start_backup()veri dosyasının en azından denetim noktası kadar yeni olduğundan emin olun. Kurtarma sırasında günlükler uygulanır.

Veriler eskiyse, günlük verileri güncelleyecektir.

Veriler yeniyse, günlük aynı içeriğe sahip olacaktır. Tekrar yazmanın bir zararı yok.

Günlükler önceden yazıldığından (WAL) veriler asla günlükten daha yeni değildir.


Sen sordun:

... xfs-freeze...

xfs-freezeiçin birdir pg_start_backup(), bir anlık yapmayız. Bunu yapmak için bir birim yöneticisine ihtiyacınız var.


Sen sordun:

... WAL her şeyi yeniden oynatabiliyorsa neden tablo alanı oluştur ve veritabanı ifadeleri oluştur desteklenmiyor?

Desteklenir, sadece küçük bir şey. Bkz. Http://www.postgresql.org/docs/8.1/static/backup-online.html :

23.3.5. Uyarılar

CREATE TABLESPACE komutları, değişmez mutlak yolla WAL günlüğüne kaydedilir ve bu nedenle aynı mutlak yolla tablo alanı oluşturma olarak yeniden yürütülür. Günlük farklı bir makinede yeniden oynatılıyorsa bu istenmeyen bir durum olabilir. Günlük aynı makinede yeniden oynatılsa bile, yeni bir veri dizininde tehlikeli olabilir: yeniden oynatma yine de orijinal tablo alanının içeriğinin üzerine yazılır. Bu tür potansiyel yakalamalardan kaçınmak için en iyi uygulama, tablo alanları oluşturduktan veya bıraktıktan sonra yeni bir temel yedekleme almaktır.


xfs-freeze hakkında Bu bir birim yöneticisine bağlı olduğunu biliyorum, bu snapshoting prosedürünün sadece bir parçasıydı. ancak WAL kurtarma işleminin vakum öncesi ikili tablodaki vakum öncesi tablo günlüklerinin yeniden yürütülmesini iyi işleyeceğinden emin miyiz? ve global / pg_control içeriği önemli midir? WAL her şeyi yeniden oynatabiliyorsa neden tablo alanı oluştur ve veritabanı ifadeleri oluştur desteklenmiyor?
regilero

CREATE TABLESPACEİşler. güncellenmiş cevaba bakınız. Emin değilim VACUUM, ama neden olmayacağını hayal edemiyorum.
J-16 SDiZ
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.