Pg_dump etkin bir bekleme sunucusunda mı çalışıyor?


21

Feragatname: Kuşkusuz bunu henüz denemedim, ancak doğru çalışıp çalışmadığını bilmediğimden emin değilim, bu yüzden sormak istedim.

pg_dumpallBu yükü birincil yüke koymaktan kaçınmak için, her zaman yedekleme işini (üzerinden ) akışlı çoğaltma çalışan sıcak bir bekleme sunucusundan çalıştırmak istiyorum. İnsanların, örneğin burada ve burada karşılaştığı bazı yakalamalardan bahsettim , ama çok az rehberlik. Yedekleme, tutarlı olduğu sürece (olması gerektiği gibi), birincil arkanın biraz gerisinde kalsa sorun olmaz.

Benim sorularım:

  1. Bunu gerçekten yapmak istiyor muyum yoksa yedekleme birincil sunucuda mı yapılmalı? Niye ya?

  2. Bekleme modundayken bir dökümü yaparken, hangi ayarlara ihtiyacım var ve bunu doğru şekilde yapmak için hangi prosedürü kullanmalıyım? Örneğin, yedekleme süresince çoğaltmayı durdurmalı mıyım?


Çoğaltmanızın bekleme veritabanını tutarlı bir durumda tutması durumunda, yedeklemenizin tutarlı olmasını beklerim. Gibi pg_dumpbelgeler devletler: "veritabanı eşzamanlı kullanılıyor olsa bile bu tutarlı yedekleme yapar." pg_dumpallher veritabanı için eskiyi çalıştırır.
dezso

Yanıtlar:


21

AFAIK, pg_dumpsıcak bir bekleme modunda koşmak , bekleme standlarının faydalı olabileceği en önemli şeylerden biri. Mükemmel derecede güvenilir olmasa da, tamamen güvenlidir - bekleme, ana ünitenin çok gerisine düştüğünde işlemi durdurursa çöplükler başarısız olabilir.

İzlemeniz gereken tek şey, beklemenin güncel ve doğru olduğundan emin olmaktır. Bekleme, master ile olan bağlantısını kaybetti ve çok geride kaldıysa, üç haftalık bir bekleme süresine neşeyle destek olmak istemezsiniz.

Yedekleme sırasında bekleme modunun master'in çok gerisinde kalmasına izin vermeniz gerekir, çünkü pg_dumpWAL'yi tekrar oynatmaya devam etmek için işleminizi iptal etmeniz gerekir. Bkz sıcak beklemede belgeleri , özellikle "sorgu çakışmaları yönetmek" bölümünü ve max_standby_archive_delayve max_standby_streaming_delayparametreleri.

Master'ın, kölenin tekrar yakalayabilmesi için yeterli WAL arşivini tutmaya istekli olması gerektiğini unutmayın.


12
  1. Bekleme modundayken yedekleme yaparız, tamamen iyi.
  2. Bekleme sisteminde yedekleme sırasında iptal edilen ifade çakışmasını önlemek için, beklemede iken çoğaltmayı duraklatmanız SELECT pg_xlog_replay_pause();, ardından yedeklemenizi çalıştırmanız SELECT pg_xlog_replay_resume();, çoğaltmayı sürdürmek için çalıştırmayı bitirmeniz gerekir. Yukarıdaki komutların çalıştırılmasının, veri tabanının boyutuna bağlı olarak oldukça büyük olabilecek köle üzerinde kurtarma gecikmesine neden olacağını unutmayın. Ayrıca, duraklama sırasında köle üzerinde oynatılmayacaklarından WAL segmentlerinin alacağı alanı göz önünde bulundurun.

Dokümantasyonda başka yararlı yönetim fonksiyonlarını da bulabilirsiniz . Sunucu, kurtarma aslında Durdurduktan önceyse Örneğin, kontrol edin: SELECT pg_is_in_recovery().


0

Yedekleme sırasında çoğaltmayı duraklatırsanız, (Bu bütünlüğü ve tutarlılığı korumak için iyi bir fikirdir), ana postgresql'nizdeki bazı satırları düzenleyebilirsiniz:

Yedeklemenizi alışkanlıkla geciktirmek ne kadar sürüyor. Ana düğümün, çoğaltmaya devam etmek için gereken tüm x_log dosyalarını koruduğundan emin olun. Postgresql.conf düzenlemesinde yapabilirsiniz.

wal_keep_segments = 32      # in logfile segments, 16MB each; 0 disables

Bunu değiştirmezseniz ve yedekleme işleminiz çok uzunsa, büyük olasılıkla ana düğüm xlog dosyalarını köleye göndermeden önce siler.


Bu ayar yalnızca akış çoğaltması için gereklidir. Düzenli çoğaltma kullanıyorum ve bekleme bekleme sunucusu duraklatıldığında bile wal bekleme modunda tutulur.
david.perez
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.