V produkčním prostředí bez ohledu na to, jak velký nebo malý je váš PostgreSQL databáze může být, pravidelné zpětné je 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 o instalaci PostgreSQL ve vaší distribuci Linuxu.
- Jak nainstalovat PostgreSQL a pgAdmin4 v Ubuntu 20.04
- Jak nainstalovat PostgreSQL a pgAdmin v CentOS 8
- Jak nainstalovat PostgreSQL a pgAdmin v RHEL 8
Začněme…
Zálohujte jednu databázi PostgreSQL
PostgreSQL poskytuje pg_dump nástroj, 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, PostgreSQL databáze, začněte přihlášením k databázovému serveru a poté přepněte na Postgres uživatelský účet a spusťte pg_dump následovně (nahraďte tecmintdb
s 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 další výstupní formáty. Výstupní formát můžete určit pomocí -F
možnost, kde c
znamená archivní soubor vlastního formátu, 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
K výpisu výstupu ve výstupním formátu adresáře použijte -f
příznak (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 pg_dumpall nástroj podle obrázku.
$ pg_dumpall > all_pg_dbs.sql
Výpis můžete obnovit pomocí psql jak je uvedeno.
$ pgsql -f all_pg_dbs.sql postgres
Obnovení databáze PostgreSQL
Chcete-li obnovit PostgreSQL databáze, můžete použít psql nebo pg_restore utility. psql se používá k obnovení textových souborů vytvořených pg_dump zatímco pg_restore se používá k obnovení databáze PostgreSQL z archivu vytvořeného 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 souboru ve formátu prostého textu:
$ psql tecmintdb < tecmintdb.sql
Jak je uvedeno výše, výpis vlastního formátu není skript pro pgsql , takže je nutné jej obnovit pomocí pg_restore jak je uvedeno.
$ pg_restore -d tecmintdb tecmintdb.dump OR $ pg_restore -d tecmintdb tecmintdb.tar OR $ pg_restore -d tecmintdb tecmintdumpdir
Zálohujte velké 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í nástroje pro kompresi, 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 vypsat paralelně výpisem number_of_jobs tabulky současně pomocí -j
příznak, 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 zadat vzdálený databázový server, pg_dump měli kontaktovat, použijte možnosti příkazového řádku -h
zadejte vzdáleného hostitele a -p
určuje vzdálený port, na kterém databázový server naslouchá. Kromě toho použijte -U
příznak k zadání názvu databázové role pro připojení jako.
Nezapomeňte nahradit 10.10.20.10 a 5432 a tecmintdb s IP adresou 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ý, použijte pg_dump a psql nástroje, jak je znázorněno.
$ 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í cronu pracovní místa. Cron úlohy jsou běžně používaným prostředkem pro plánování různých druhů úloh, které mají být spuštěny na serveru.
Můžete nakonfigurovat úlohu cron pro automatizaci PostgreSQL zálohování databáze 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 tom, jak naplánovat úlohy 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.