Vyhledávání na webu

Jak zálohovat a obnovit databázi PostgreSQL


V produkčním prostředí, bez ohledu na to, jak velká nebo malá může být vaše PostgreSQL databáze, je pravidelné zálohování základním aspektem správy databáze. V tomto článku se dozvíte, jak zálohovat a obnovit databázi PostgreSQL.

Předpokládáme, že již máte funkční instalaci databázového systému PostgreSQL. Pokud ne, přečtěte si naše následující články a nainstalujte PostgreSQL do vaší distribuce Linuxu.

Začněme…

Zálohujte jednu databázi PostgreSQL

PostgreSQL poskytuje nástroj pg_dump, který vám pomůže zálohovat databáze. Vygeneruje databázový soubor s příkazy SQL ve formátu, který lze v budoucnu snadno obnovit.

Chcete-li zálohovat databázi PostgreSQL, začněte přihlášením k databázovému serveru, poté přepněte na uživatelský účet Postgres a spusťte pg_dump následovně (nahraďte tecmintdb názvem databáze, kterou chcete zálohovat). Ve výchozím nastavení je výstupním formátem soubor skriptu SQL ve formátu prostého textu.

pg_dump tecmintdb > tecmintdb.sql

pg_dump podporuje i jiné výstupní formáty. Výstupní formát můžete určit pomocí volby -F, kde c znamená soubor vlastního formátu archivu, d znamená archiv ve formátu adresáře a t znamená archivní soubor ve formátu tar: všechny formáty jsou vhodné pro vstup do pg_restore.

Například:

pg_dump -F c tecmintdb > tecmintdb.dump
OR
pg_dump -F t tecmintdb > tecmintdb.tar

Chcete-li vypsat výstup ve výstupním formátu adresáře, použijte parametr -f (který se používá k určení výstupního souboru) k určení cílového adresáře místo souboru. Adresář, který vytvoří pg_dump, nesmí existovat.

pg_dump -F d tecmintdb -f tecmintdumpdir	

Chcete-li zálohovat všechny PostgreSQL databáze, použijte nástroj pg_dumpall, jak je uvedeno na obrázku.

pg_dumpall > all_pg_dbs.sql

Výpis můžete obnovit pomocí psql, jak je znázorněno.

psql -f all_pg_dbs.sql postgres

Obnovení databáze PostgreSQL

Chcete-li obnovit databázi PostgreSQL, můžete použít nástroje psql nebo pg_restore. psql se používá k obnovení textových souborů vytvořených pomocí pg_dump zatímco pg_restore se používá k obnovení databáze PostgreSQL z archivu vytvořeného uživatelem pg_dump< v jednom z formátů jiného než prostého textu (vlastní, tar nebo adresář).

Zde je příklad, jak obnovit výpis prostého textového souboru:

psql tecmintdb < tecmintdb.sql

Jak je uvedeno výše, výpis vlastního formátu není skript pro psql, takže je nutné jej obnovit pomocí pg_restore, jak je znázorněno.

pg_restore -d tecmintdb tecmintdb.dump
OR
pg_restore -d tecmintdb tecmintdb.tar
OR
pg_restore -d tecmintdb tecmintdumpdir	

Zálohování komprimované databáze PostgreSQL

Pokud je databáze, kterou zálohujete, velká a chcete vygenerovat poměrně menší výstupní soubor, můžete spustit komprimovaný výpis, kde musíte filtrovat výstup pg_dump pomocí komprimačního nástroje, jako je gzip nebo některý z vašich oblíbených:

pg_dump tecmintdb | gzip > tecmintdb.gz

Pokud je databáze extrémně velká, můžete provést výpis paralelně tak, že současně vyprázdníte tabulky number_of_jobs pomocí příznaku -j, jak je znázorněno.

pg_dump -F d -j 5 -f tecmintdumpdir

Je důležité poznamenat, že možnost paralelního výpisu zkracuje dobu výpisu, ale na druhou stranu také zvyšuje zatížení databázového serveru.

Zálohování vzdálených databází PostgreSQL

pg_dump je běžný klientský nástroj PostgreSQL, který podporuje operace na vzdálených databázových serverech. Chcete-li určit vzdálený databázový server, na který se má pg_dump obrátit, použijte volby příkazového řádku -h k určení vzdáleného hostitele a -p určí vzdáleného hostitele port, na kterém databázový server naslouchá. Kromě toho použijte příznak -U k zadání názvu role databáze, pod kterou se chcete připojit.

Nezapomeňte nahradit 10.10.20.10 a 5432 a tecmintdb adresou IP vzdáleného hostitele nebo názvem hostitele, portem databáze a názvem databáze.

pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

Ujistěte se, že uživatel, který se připojuje vzdáleně, má požadovaná oprávnění pro přístup k databázi a že je na databázovém serveru nakonfigurována příslušná metoda ověřování databáze, jinak se zobrazí chyba jako na následujícím snímku obrazovky.

Je také možné vypsat databázi přímo z jednoho serveru na druhý pomocí obslužných programů pg_dump a psql, jak je znázorněno na obrázku.

pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

Automatické zálohování databáze PostgreSQL pomocí úlohy Cron

Zálohování můžete provádět v pravidelných intervalech pomocí úloh cron. Úlohy Cron jsou běžně používaným prostředkem pro plánování různých druhů úloh pro spuštění na serveru.

Úlohu cron pro automatizaci zálohování PostgreSQL můžete nakonfigurovat následovně. Všimněte si, že jako superuživatel PostgreSQL musíte spustit následující příkazy:

mkdir -p /srv/backups/databases

Dále spusťte následující příkaz a upravte crontab a přidejte novou úlohu cron.

crontab -e

Zkopírujte a vložte následující řádek na konec crontab. Můžete použít kterýkoli z výše popsaných formátů výpisu.

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

Uložte soubor a ukončete.

Služba cron automaticky spustí tuto novou úlohu bez restartu. A tato úloha cron bude běžet každý den o půlnoci, je to minimální řešení úlohy zálohování.

Další informace o plánování úloh cronu naleznete v části: Jak vytvářet a spravovat úlohy cronu v systému Linux

To je prozatím vše! Je dobré učinit zálohování dat součástí vaší rutiny správy databází. Chcete-li nás kontaktovat s jakýmikoli dotazy nebo připomínkami, použijte formulář pro zpětnou vazbu níže. Další informace naleznete na referenčních stránkách pg_dump a pg_restore.