DBAtlas · Veritabanı operasyon atlası

PostgreSQL mantıksal yedek ve geri yükleme (pg_dump / pg_restore)

PostgreSQLSeviye: OrtaSüre: 20–90 dk (veri boyutuna göre)

pg_dump, pg_dumpall ve pg_restore ile tablo, şema, veritabanı ya da tüm cluster düzeyinde mantıksal yedek ve geri yükleme; yalnız yapı (DDL) ya da yalnız veri, başka sunucuya/sürüme taşıma, dump içinden tek tablo geri yükleme ve systemd/cron ile zamanlanmış, doğrulanan, saklama süreli yedek. Her yolun sonunda satır sayısı karşılaştırmalı doğrulama. Streaming replication ve Patroni cluster'larında dump replica'dan (HAProxy okuma portu ya da standby) alınır, geri yükleme yalnız primary/leader'a yapılır.

Mantıksal yedek dump anına döner, belirli bir zamana dönüş (PITR) yapmaz; üretimde asıl yedek fiziksel olmalıdır: pgBackRest (önerilen) ya da ek araçsız pg_basebackup + WAL arşivi. Büyük veritabanını saniyelik kesintiyle yeni sürüme taşımak için logical replication, aynı sunucuda yerinde yükseltme için pg_upgrade.

Yapı: 1 sunucu, streaming replication (primary + standby) ya da Patroni cluster'ı; taşımada kaynak + hedef, uzaktan zamanlanmış yedekte + yedek sunucusu

Senaryolar

  • Tek tablo(lar) export / import — Seçilen tabloların yapısı ve verisi (index, constraint, trigger dahil) alınır ve başka bir veritabanına yüklenir.
  • Bir şemayı export / import — Şemadaki tüm nesneler (tablo, view, fonksiyon, sequence) alınır.
  • Tek veritabanı yedek / geri yükleme — Bir veritabanının tamamı (yapı + veri) tek dump'a alınır ve aynı ya da başka bir veritabanına geri yüklenir. Roller (globals) dahil değildir.
  • Tüm cluster (roller + tablespace'ler + her veritabanı) — pg_dumpall -g ile globals, her veritabanı için ayrı pg_dump; geri yükleme geçici bir test cluster'ında prova edilir.
  • Yalnız şema yapısı (DDL) — Veri olmadan tablo, index, view, fonksiyon tanımları; inceleme, sürüm kontrolü ya da boş ortam kurmak için.
  • Yalnız veri — Yapı hedefte hazırken yalnız satırlar (COPY) aktarılır.
  • Başka sunucuya / sürüme taşıma — Hedef sunucuda yeni sürümün pg_dump'ı kaynağa ağ üzerinden bağlanır; pipe ya da dosya ile aktarılır.
  • Dump içinden tek tablo / nesne geri yükleme — Mevcut bir custom/directory dump'tan liste dosyası (-L) ile yalnız bir tablo ve ona ait index, constraint ve verisi geri yüklenir.
  • Zamanlanmış yedek (systemd timer / cron) — Her gün globals + veritabanı yedeği, okunabilirlik doğrulaması, saklama süresi, log ve hata bildirimi.

Başlamadan önce

  • …Patroni cluster'ı çalışıyor; bu sunucuda PostgreSQL … istemci araçları (…) kurulu ve HAProxy/VIP (…) yazma (…)… ve okuma (…)… portlarına erişiliyor. postgres rolünün parolası (Patroni'de /etc/patroni/patroni.env içindeki PATRONI_SUPERUSER_PASSWORD) elinizde.…Primary'de PostgreSQL … çalışıyor ve postgres kullanıcısı yerelden (peer) bağlanabiliyor; standby … streaming durumunda ve primary'den … portuna erişilebiliyor. Dump ağ üzerinden standby'a bağlanacağı için postgres rolünün parolası olmalı (yoksa primary'de \password postgres; parola standby'a WAL ile gelir).…PostgreSQL … çalışıyor ve işletim sisteminin postgres kullanıcısı yerelden (peer) bağlanabiliyor. DBAtlas PostgreSQL tek sunucu kurulumu rehberiyle kurulduysa yollar aynıdır.…
  • …Cluster sağlıklı: bir Leader, en az bir replica streaming ve gecikme küçük. Patroni node'larından birinde kontrol edin.…Standby … primary'ye bağlı ve gecikmesi küçük (dump, standby'ın o anki görüntüsünü alır).…
  • Yedek dizini … veri diskinden ayrı bir diskte ve yeterli boş alan var: sıkıştırılmış custom/directory dump genellikle veritabanı boyutunun %10–30'u kadardır (index'ler dump'a yalnız tanım olarak girer); plain format ve sıkıştırmasız dump daha büyüktür.
  • pg_dump sürümü yedeği alınan sunucuyla aynı ya da daha yeni ana sürümde (yeni pg_dump eski sunucuyu okuyabilir; tersi çalışmaz). pg_restore, dump'ı alan pg_dump ile aynı ya da daha yeni olmalı.
  • Hedefteki pg_dump/pg_restore (…) kaynak sunucuyla (…) aynı ya da daha yeni ana sürümde: taşıma, hedefin yeni araçlarıyla yapılır.
  • Kaynakta kullanılan extension'ların (postgis, pgvector, pg_partman…) yazılımı hedef sunucuda da kurulu. Mantıksal yedek yalnız CREATE EXTENSION satırını taşır, extension'ın kendisini değil.
  • Kullanıcı tanımlı tablespace varsa (aşağıdaki sorgu satır döndürürse) hedefte aynı dizinler hazırlanmalı ya da geri yükleme --no-tablespaces ile varsayılan tablespace'e yapılmalı.
  • Hedef sunucu … üzerinde PostgreSQL … kurulu, çalışıyor ve boş (yalnız postgres, template0, template1). Hedef, kaynağın … portuna erişebiliyor.
  • Yedek sunucusu … …HAProxy/VIP … adresinin … portuna…standby … sunucusunun … portuna…veritabanı sunucusunun … portuna… erişebiliyor ve PGDG repo'suna (ya da kurum içi mirror'a) çıkabiliyor.
  • Sunucudan e-posta gönderilebiliyor: yerel MTA (postfix) kurum SMTP relay'ine yönlendirilmiş.
  • Büyük bir geri yükleme ya da taşıma için bakım penceresi planlandı; hedef üzerine yazılacaksa hedefin yedeği/snapshot'ı alındı.

Rehberin aşamaları

  • Hazırlık — Yedek dizinini oluştur · Bağlantı parolasını .pgpass'e kaydet · Standby'da pg_hba.conf izni ver · Bağlantıların hangi role gittiğini doğrula · Veritabanı boyutlarını ve uzun işlemleri kontrol et
  • Geri yükleme (import) — Hedef veritabanını hazırla · Hedefi hazırla: extension, şema ve trigger fonksiyonları · Geri yükle · Hedefin üzerine yazarak geri yükle · İstatistikleri topla (ANALYZE) · Satır sayılarını karşılaştır
  • Yalnız şema yapısı (DDL) — DDL dump'ını al · Hedef veritabanını oluştur · DDL'i hedefe uygula · Yapıların aynı olduğunu doğrula
  • Yalnız veri — Veri dump'ını al · Hedef veritabanını oluştur · Hedefte tablo yapısını oluştur · Hedef tabloları boşalt · Veriyi yükle · İstatistikleri topla ve satır sayılarını karşılaştır
  • Tüm cluster yedeği — Globals ve tüm veritabanlarını yedekle · Yedeğin okunabilirliğini doğrula
  • Geri yükleme provası (geçici test cluster'ı) — Test dizinini hazırla · Geçici cluster'ı oluştur ve başlat · Globals'ı yükle · Veritabanlarını yükle · ANALYZE ve satır sayısı karşılaştırması · Geçici cluster'ı kapat ve sil
  • Kaynak sunucuda erişim izni — Hedef sunucuya pg_hba.conf izni ver · Hedef sunucuya pg_hba izni ver (Patroni) · Firewall'da portu hedefe aç · Uygulamayı durdur (kesme anı)
  • Hedef sunucuda aktarım — Kaynak bağlantı parolasını .pgpass'e kaydet · Sürüm ve extension uyumunu kontrol et · Rolleri taşı (globals) · Veritabanlarını aktar (dosya ile, paralel) · Veritabanlarını aktar (pipe ile) · İstatistikleri topla (ANALYZE) …
  • Geçiş sonrası — Kaynaktaki geçici erişimi kaldır · Kaynaktaki geçici erişimi kaldır (Patroni) · Uygulamayı hedefe yönlendir
  • Dump içinden tek tablo geri yükleme — Dump'ın içeriğini incele · Liste dosyasını oluştur (-L) · Hedef veritabanını hazırla · Tabloyu geri yükle · Tabloyu asıl veritabanına geri yükle · Satır sayısını karşılaştır …
  • Yedek sunucusu ve yedek rolü — Yedek rolünü oluştur · Büyük nesnelere okuma yetkisi ver · Yedek rolüne parola ver · Yedek sunucusuna pg_hba.conf izni ver · Yedek sunucusuna pg_hba izni ver (Patroni) · PostgreSQL istemci araçlarını kur (yedek sunucusu) …
  • Yedek betiği — Araçların tam yolunu doğrula · Bildirim aracını kur · Yedek betiğini yaz · Betiği çalıştırılabilir yap · İlk yedeği elle al
  • Zamanlama (systemd timer) — systemd servisini yaz · systemd timer'ı yaz · Timer'ı etkinleştir ve servisi elle tetikle
  • Zamanlama (cron) — cron servisini hazırla · cron görevini yaz · cron dosyasının iznini ayarla ve cron ortamında dene · cron'un çalıştığını doğrula
  • Doğrulama ve izleme — Son yedeği test veritabanına geri yükle · Son yedeğin yaşını izle
  • Sonraki adım: fiziksel yedek — Mantıksal yedeğin sınırlarını kapatın
Ortamına göre adım adım planı aç →