Zálohování databáze

Z PostgreSQL
Verze z 22. 10. 2011, 17:39, kterou vytvořil Pavel (diskuse | příspěvky) (Online fyzické zálohování databázového clusteru s pomocí pg_basebackup)

(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Přejít na: navigace, hledání

Jednoduché zálohování pomocí pg_dump a pg_dumpall

Zálohování pomocí pg_dump a pg_dumpall je nejjednodušší metoda (když pominu zkopírování PostgreSQL clusteru při zastaveném serveru). Pro svou jednoduchost se jedná o robustní metodu.

  • Jednoduché a rychlé pro zápis.
  • Možnost zálohování vybraných databází a vybraných tabulek.
  • Záloha je ve formátu plain textu obsahující SQL příkazy.
  • Přenositelné napříč verzemi a platformami.
  • U velkých db pomalá obnova (je nutné znovuvytvářet indexy), nepraktické pro databáze nad 100G.
pg_dump mojedb > zaloha.sql

Obnova ze zálohy

psql postgres -f zaloha.sql

pg_dump neukládá seznam uživatelů databáze (v Pg se uživatelé nevztahují k jedné db). Pro export uživatelů (rolí) je nutné použít pg_dumpall -r.

Online fyzické zálohování databázového clusteru s pomocí pg_basebackup

pg_basebackup vytvoří konzistentní kopii databázového clusteru - a to za běhu serveru. Rychlost zálohování i obnovy je omezena rychlostí zápisu a čtení disků.

  • Poměrně jednoduché.
  • Zálohuje vždy celou databázi včetně indexů - mnohem větší objem zálohy - ale i mnohem rychlejší obnova

Postup

  • Úprava postgresql.conf
wal_level = archive
archive_mode = on
archive_command = '/bin/true'
max_wal_senders = 1
  • Úprava pg_hba.conf - explicitní přístup uživatele s právem REPLICATION k fiktivní databázi replication
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     ident
local   replication     backup                                  md5

Pozor: datábáze replication je virtuální a proto se na ní nevztahuje ALL,

  • Restart serveru - přidání uživatele backup a nastavení hesla
ostgres=# create role backup login replication;
CREATE ROLE
postgres=# alter role backup password 'heslo';
ALTER ROLE
  • Vlastní zálohování
[pavel@diana ~]$ pg_basebackup -D zaloha1 -U backup 
Password: 
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived

Obnova ze zálohy

Obsah adresáře zálohy zkopírujeme do adresáře clusteru PostgreSQL a nastartujeme server.