Skip to content
VDS · Baze podataka

Rezervne kopije baza podataka

Kako zakazati MySQL i PostgreSQL dumpove, prebaciti ih sa mašine i proveriti da se rezervna kopija zaista vraća.

Ažurirano 23. avgust 2026.

VPS ne dolazi sa automatskim bekapima mašine ili snimcima stanja: sve što sam nisi kopirao postoji u jednoj jedinoj instanci. Damp baze podataka je prva stvar koju treba da podesiš, jer nema odakle da povratiš podatke, dok sajt može da se ponovo postavi od nule.

Ručni damp

PostgreSQL:

pg_dump -Fc -U shop -h 127.0.0.1 shop > /srv/backups/shop-$(date +%F).dump
pg_dumpall -U postgres --roles-only > /srv/backups/roles.sql

MySQL i MariaDB:

mysqldump --single-transaction --quick --routines --events \
  -u root shop | gzip > /srv/backups/shop-$(date +%F).sql.gz

--single-transaction pravi konzistentan InnoDB damp bez zaključavanja tabela — bez njega će ti se sajt zaglaviti tokom izvoza. PostgreSQL format -Fc je komprimovan i omogućava ti da povratiš pojedinačne tabele.

Ne stavljaj lozinke u komandnu liniju: napravi ~/.pgpass ili ~/.my.cnf sa dozvolama 600.

Po rasporedu

mkdir -p /srv/backups && chmod 700 /srv/backups
crontab -e
20 3 * * * /usr/local/bin/db-backup.sh >> /var/log/db-backup.log 2>&1

Skripta /usr/local/bin/db-backup.sh:

#!/bin/bash
set -euo pipefail
DEST=/srv/backups
STAMP=$(date +%F-%H%M)
pg_dump -Fc -U shop -h 127.0.0.1 shop > "$DEST/shop-$STAMP.dump.tmp"
mv "$DEST/shop-$STAMP.dump.tmp" "$DEST/shop-$STAMP.dump"
find "$DEST" -name '*.dump' -mtime +14 -delete

Upisivanje u privremeni fajl pa preimenovanje je važno: ako se damp prekine, nećeš skraćeni fajl zameniti za kompletan bekap. set -euo pipefail zaustavlja skriptu na prvoj grešci umesto da tiho nastavi dalje.

Prebaci bekape van mašine

Kopija na istom disku neće te spasiti od greške pri migraciji, ransomware-a ili ponovne instalacije OS-a na kartici „Pristup“. Šalji dampove van lokacije:

rsync -az --delete /srv/backups/ backup@other-host:/store/vds/

Ili na bilo koje S3-kompatibilno skladište preko rclone. Imaj u vidu propusni opseg do 500 Mbit/s i ograničenje upisa na disk po tieru: 60 MB/s po jezgru.

Provera povraćaja

Bekap koji nikad nisi povratio nije bekap.

createdb -U postgres shop_check
pg_restore -U postgres -d shop_check /srv/backups/shop-2026-08-23.dump
psql -U postgres -d shop_check -c "SELECT count(*) FROM users;"
dropdb -U postgres shop_check

Za MySQL: gunzip -c dump.sql.gz | mysql -u root shop_check.

Radi ovo jednom mesečno i zabeleži datum provere.

Česte greške

SimptomUzrok
Damp ima samo nekoliko kilobajtaSkripta je pala na autentifikaciji, a greška je otišla u /dev/null
Ponestalo je prostora na diskuNema brisanja starih bekapa po mtime
Povraćaj pada na dozvolamaRole nisu dampovane — potreban ti je --roles-only
Cron ćuti, nema bekapaCron nema tvoj PATH — koristi apsolutne putanje
Sajt se usporava noćuDamp se bori za disk — pomeri vreme, dodaj --quick

Drži najmanje dve kopije na različitim lokacijama i prati veličinu dampa: nagli pad veličine znači da nije dampovana cela baza.