Sigurnosna kopija i obnova baze podataka PostgreSQL i MySQL
Sigurnosna kopija (backup) jedna je od ključnih procedura koja osigurava sigurnost podataka. Čak i uz pouzdano hosting rješenje, mogu se dogoditi greške u aplikaciji, netočna ažuriranja ili slučajno brisanje podataka.
U ovom vodiču pokazat ćemo kako kreirati i vratiti sigurnosne kopije PostgreSQL i MySQL baza podataka koristeći standardne komandne alate — pg_dump i mysqldump.
1. Sigurnosna kopija PostgreSQL
1.1. Što je pg_dump
pg_dump je standardni PostgreSQL alat za kreiranje logičke sigurnosne kopije baze podataka. Sprema i strukturu (DDL) i podatke (DML) u tekstualnu SQL datoteku koja se kasnije može koristiti za vraćanje.
1.2. Sintaksa naredbe
pg_dump -U <user> -h <host> -p <port> -d <database> -F p -f <path_to_file.sql>
1.3. Primjer sigurnosne kopije
pg_dump -U myuser -h localhost -d mydatabase -F p -f /backups/mydatabase_$(date +%F).sql
Objašnjenje parametara:
- -U myuser — PostgreSQL korisničko ime;
- -h localhost — server host (može se navesti IP);
- -d mydatabase — naziv baze podataka;
- -F p — izlazni format (plain — običan SQL);
- -f — putanja do datoteke gdje će se sigurnosna kopija spremiti;
- $(date +%F) — dodaje trenutni datum u naziv datoteke (npr. 2025-11-03).
1.4. Komprimirana sigurnosna kopija
Za smanjenje veličine datoteke, možete koristiti gzip kompresiju:
pg_dump -U myuser mydatabase | gzip > /backups/mydatabase_$(date +%F).sql.gz
2. Vraćanje PostgreSQL baze podataka
2.1. Korištenje psql
Za vraćanje baze podataka iz tekstualne sigurnosne kopije, koristite:
psql -U myuser -d mydatabase -f /backups/mydatabase_2025-11-03.sql
Ako je sigurnosna kopija komprimirana:
gunzip -c /backups/mydatabase_2025-11-03.sql.gz | psql -U myuser -d mydatabase
2.2. Ako baza podataka ne postoji
Prvo kreirajte novu bazu podataka:
createdb -U myuser newdatabase
psql -U myuser -d newdatabase -f /backups/mydatabase_2025-11-03.sql
3. Sigurnosna kopija MySQL
3.1. Što je mysqldump
mysqldump je standardni alat za kreiranje MySQL dumpova. Sprema SQL naredbe potrebne za ponovno kreiranje tablica i umetanje podataka.
3.2. Sintaksa naredbe
mysqldump -u <user> -p -h <host> <database> > <path_to_file.sql>
3.3. Primjer sigurnosne kopije
mysqldump -u myuser -p mydatabase > /backups/mydatabase_$(date +%F).sql
Objašnjenje parametara:
- -u myuser — MySQL korisničko ime;
- -p — traži unos lozinke;
- mydatabase — naziv baze podataka;
- > — preusmjerava izlaz u datoteku.
3.4. Komprimirani dump
mysqldump -u myuser -p mydatabase | gzip > /backups/mydatabase_$(date +%F).sql.gz
4. Vraćanje MySQL baze podataka
4.1. Vraćanje iz SQL datoteke
mysql -u myuser -p mydatabase < /backups/mydatabase_2025-11-03.sql
4.2. Ako baza podataka ne postoji
Prvo kreirajte novu bazu podataka prije vraćanja:
mysql -u myuser -p -e "CREATE DATABASE newdatabase;"
mysql -u myuser -p newdatabase < /backups/mydatabase_2025-11-03.sql
4.3. Vraćanje iz komprimiranog dumpa
gunzip -c /backups/mydatabase_2025-11-03.sql.gz | mysql -u myuser -p mydatabase
5. Preporuke za automatizaciju i sigurnost
5.1. Automatizirane sigurnosne kopije s Cronom
Za redovite procese sigurnosne kopije bez ručne intervencije, postavite automatizaciju koristeći cron.
Osnovna postavka crona:
# Otvorite cron editor crontab -e
Dodajte liniju, na primjer:
0 2 * * * /usr/local/bin/db_backup.sh
Ova naredba će pokrenuti skriptu svakodnevno u 2:00 ujutro.
Napredni pristup koristeći skriptu. Kreirajte /usr/local/bin/db_backup.sh:
#!/bin/bash DATE=$(date +%F) BACKUP_DIR="/backup/$DATE" mkdir -p $BACKUP_DIR # Sigurnosna kopija PostgreSQL pg_dump -U myuser mydatabase | gzip > $BACKUP_DIR/postgres_mydatabase.sql.gz # Sigurnosna kopija MySQL mysqldump -u myuser -p mydatabase | gzip > $BACKUP_DIR/mysql_mydatabase.sql.gz # Ukloni sigurnosne kopije starije od 7 dana find /backup/ -type f -mtime +7 -delete
Učinite skriptu izvršivom:
chmod +x /usr/local/bin/db_backup.sh
I dodajte u cron:
0 2 * * * /usr/local/bin/db_backup.sh
5.2. Preporuke za sigurnost i pohranu
- Pohrana izvan servera: pohranite sigurnosne kopije u cloud storage (AWS S3, Google Cloud) ili na vanjske diskove.
- Kontrola pristupa: ograničite pristup mapi /backups, jer datoteke mogu sadržavati povjerljive podatke.
chmod 700 /backup
chmod 600 /backup/*.sql.gz
- Provjera integriteta: obavljajte testna vraćanja mjesečno kako biste provjerili funkcionalnost sigurnosne kopije.
- Povjerljivost: sigurnosne kopije sadrže sadržaj baze podataka — tretirajte ih kao povjerljive informacije.
Zaključak
Korištenje pg_dump i mysqldump je jednostavan, pouzdan i univerzalan način za izradu sigurnosnih kopija PostgreSQL i MySQL baza podataka. Ovi alati su prikladni za ručne sigurnosne kopije kao i za automatizirane procese uz minimalan trud.
Redovite sigurnosne kopije ključ su stabilnosti vašeg projekta i sigurnosti podataka.