Nejdříve si vytvoříme krátký shellový script dump.sh.
vim dump.sh
Do souboru vložíme:
#!/bin/sh
NOW=$(date +"%Y-%m-%d")
pg_dump dbname -U username -h hostname -p port | gzip > /path/to/backupname-$NOW.gzip
dbname je jméno databáze
username je jméno uživatele
hostname je adresa serveru, na kterém běží postgresql
port je port, na kterém je dostupný postgres
/path/to/backupname je cesta kam se uloží záloha. Zálohy budou pojmenovávány backupname-datum.backup.
Do příkazu pg_dump je možné přidat mnohem více parametrů, jako například zálohovat jen konkrétní tabulky. Všechny jsou popsány v dokumentaci na stránce https://www.postgresql.org/docs/9.6/app-pgdump.html.
Jakmile máme script vytvořený, nastavíme mu oprávnění
chmod 755 dump.sh
A můžeme vyzkoušet, zda funguje
./dump.sh
Heslo do PostgreSQL
Pokud příkaz pg_dump zkusíte spustit ručně, budete požádáni o zadání hesla. Při automatickém zálohování ale není možné heslo zadávat. Je tedy potřeba vytvořit v domovském adresáři uživatele, pod kterým bude zálohování spouštěno, soubor .pgpass.
Do souboru .pgpass zadáme řádku obsahující:
hostname:port:dbname:username:password
Například tedy
localhost:5432:moje_databaze:admin:password1234
Soubor musí mít oprávnění 0600 (-rw-------) jinak nebude použit.
Nastavení oprávnění se provádí příkazem
chmod 0600 .pgpass
Další informace o souboru .pgpass naleznete přímo v dokumentaci Postgresu.
https://www.postgresql.org/docs/9.6/libpq-pgpass.html
Automatizace zálohování
Jednoduché. Zadáme script do cronu a je to.
crontab -e
Otevře se editor a doplníme řádku
0 1 * * * /path/to/dump.sh
Tato řádka zajistí, že každý den v 1:00 v noci bude spuštěno zálohování.
A je to!
P.S.: Kdyby to někoho zajímalo, tak FlexiBee dělá zálohy příkazem
pg_dump --username=username --host=hostname --port=port --file=/path/to/backupname -b --format=c dbname