sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql zálohování DB Ideální postupy

Přemýšlel jsem o tom, co jste napsal, a tady je několik nápadů pro vás:

  1. Pokud potřebujete zálohu, která bude skutečně konzistentní do určitého bodu v čase, musíte použít pg_basebackup nebo pg_barman (interně používá pg_basebackup) - vysvětlení je v 1. odkazu níže. Nejnovější pg_basebackup 10 streamuje protokoly WAL, takže zálohujete také všechny změny provedené během zálohování. Tato záloha samozřejmě zabere pouze celou instanci PG. Na druhou stranu nezamyká žádný stůl. A pokud to uděláte ze vzdálené instance, pak to způsobí pouze malé zatížení CPU na PG instanci a disk IO není tak velký, jak některé texty naznačují. Viz odkazy 4 o mých zkušenostech. Obnova je poměrně jednoduchá – viz odkaz 5.
  2. Pokud používáte pg_dump, musíte pochopit, že nemáte žádnou záruku, že vaše záloha je skutečně konzistentní k danému okamžiku – opět viz odkaz 1. Existuje možnost použít snímek databáze (viz odkazy 2 a 3), ale ani u něj nelze počítat se 100% konzistencí. pg_dump jsme použili pouze na naší analytické databázi, která se nové načítá pouze 1x denně (včera oddíly z produkční databáze). Můžete to urychlit pomocí paralelní volby (funguje pouze pro formát zálohy adresářů). Nevýhodou je ale mnohem vyšší zatížení PG instance - vyšší využití CPU, mnohem vyšší IO disku. I když spouštíte pg_dump vzdáleně - v takovém případě ukládáte pouze IO disku pro ukládání záložních souborů. Navíc pg_dump potřebuje umístit zámek čtení na tabulky, aby mohl kolidovat buď s novými vložkami, nebo s replikací (když se použije na repliku). Ale když vaše databáze dosáhne stovek GB, pak i paralelní výpis může trvat hodiny a v tu chvíli byste stejně museli přejít na pg_basebackup.
  3. pg_barman je "pohodlná verze" pg_basebackup + umožňuje vám zabránit ztrátě dat, i když vaše instance PG velmi vážně havaruje. Uvedení do provozu vyžaduje více změn, ale rozhodně to stojí za to. Budete muset nastavit archivaci protokolu WAL (viz odkaz 6) a pokud máte PG <10, budete muset nastavit "max_wal_senders" a "max_replication_slots" (které stejně potřebujete pro replikaci) - vše je v manuálu pg-barman, i když popis není zrovna skvělé. pg_barman bude streamovat a ukládat záznamy WAL i mezi zálohami, takže si můžete být jisti, že ztráta dat v případě velmi špatného pádu nebude téměř žádná. Ale zprovoznění může trvat mnoho hodin, protože popisy nejsou zrovna dobré. pg-barman pomocí svých příkazů provádí zálohování i obnovu.

Vaše databáze je velká 5 GB, takže jakákoli metoda zálohování bude rychlá. Musíte se však rozhodnout, zda potřebujete obnovu v určitém okamžiku a téměř nulovou ztrátu dat nebo ne - tedy zda budete investovat čas do nastavení pg-barman nebo ne.

Odkazy:

  1. PostgreSQL, zálohy a vše ostatní musíte vědět
  2. Recenze papíru:14-serializovatelný Izolace snímků v PostgreSQL - o snímcích
  3. Paralelní dumping databází - příklad použití snímku
  4. pg_basebackup zkušenosti
  5. pg_basebackup - obnovení zálohy tar
  6. Archivace protokolů WAL pomocí skriptu



  1. Průvodce automatizací databází s několikanines ClusterControl

  2. Získejte poslední den v měsíci v PostgreSQL

  3. VB.NET mySQL příkaz insert

  4. Jak to vyřešit v Mysql (#1242 - Poddotaz vrací více než 1 řádek)?