Varnostno kopiranje in obnova podatkovnih baz PostgreSQL in MySQL
Varnostna kopija je eden ključnih postopkov, ki zagotavlja varnost podatkov. Tudi pri zanesljivem gostovanju lahko pride do napak v aplikacijah, nepravilnih posodobitev ali nenamernega brisanja podatkov.
V tem vodniku bomo pokazali, kako ustvariti in obnoviti varnostne kopije podatkovnih baz PostgreSQL in MySQL z uporabo standardnih ukaznih orodij — pg_dump in mysqldump.
1. Varnostna kopija PostgreSQL
1.1. Kaj je pg_dump
pg_dump je standardno orodje PostgreSQL za ustvarjanje logične varnostne kopije baze podatkov. Shrani tako strukturo (DDL) kot podatke (DML) v besedilno SQL datoteko, ki jo je mogoče kasneje uporabiti za obnovitev.
1.2. Sintaksa ukaza
pg_dump -U <user> -h <host> -p <port> -d <database> -F p -f <path_to_file.sql>
1.3. Primer varnostne kopije
pg_dump -U myuser -h localhost -d mydatabase -F p -f /backups/mydatabase_$(date +%F).sql
Pojasnilo parametrov:
- -U myuser — uporabniško ime PostgreSQL;
- -h localhost — gostitelj strežnika (lahko se določi IP);
- -d mydatabase — ime baze podatkov;
- -F p — izhodni format (plain — navaden SQL);
- -f — pot do datoteke, kjer bo varnostna kopija shranjena;
- $(date +%F) — doda trenutni datum v ime datoteke (npr. 2025-11-03).
1.4. Stisnjena varnostna kopija
Za zmanjšanje velikosti datoteke lahko uporabite stiskanje gzip:
pg_dump -U myuser mydatabase | gzip > /backups/mydatabase_$(date +%F).sql.gz
2. Obnavljanje baze podatkov PostgreSQL
2.1. Uporaba psql
Za obnovitev baze podatkov iz besedilne varnostne kopije uporabite:
psql -U myuser -d mydatabase -f /backups/mydatabase_2025-11-03.sql
Če je varnostna kopija stisnjena:
gunzip -c /backups/mydatabase_2025-11-03.sql.gz | psql -U myuser -d mydatabase
2.2. Če baza podatkov ne obstaja
Najprej ustvarite novo bazo podatkov:
createdb -U myuser newdatabase
psql -U myuser -d newdatabase -f /backups/mydatabase_2025-11-03.sql
3. Varnostna kopija MySQL
3.1. Kaj je mysqldump
mysqldump je standardno orodje za ustvarjanje MySQL izpiskov. Shrani SQL ukaze, potrebne za ponovno ustvarjanje tabel in vstavljanje podatkov.
3.2. Sintaksa ukaza
mysqldump -u <user> -p -h <host> <database> > <path_to_file.sql>
3.3. Primer varnostne kopije
mysqldump -u myuser -p mydatabase > /backups/mydatabase_$(date +%F).sql
Pojasnilo parametrov:
- -u myuser — uporabniško ime MySQL;
- -p — zahteva geslo;
- mydatabase — ime baze podatkov;
- > — preusmeri izhod v datoteko.
3.4. Stisnjen izpis
mysqldump -u myuser -p mydatabase | gzip > /backups/mydatabase_$(date +%F).sql.gz
4. Obnavljanje baze podatkov MySQL
4.1. Obnavljanje iz SQL datoteke
mysql -u myuser -p mydatabase < /backups/mydatabase_2025-11-03.sql
4.2. Če baza podatkov ne obstaja
Pred obnovitvijo ustvarite novo bazo podatkov:
mysql -u myuser -p -e "CREATE DATABASE newdatabase;"
mysql -u myuser -p newdatabase < /backups/mydatabase_2025-11-03.sql
4.3. Obnavljanje iz stisnjenega izpisa
gunzip -c /backups/mydatabase_2025-11-03.sql.gz | mysql -u myuser -p mydatabase
5. Priporočila za avtomatizacijo in varnost
5.1. Avtomatizirane varnostne kopije s Cron
Za redne postopke varnostnega kopiranja brez ročnega posredovanja nastavite avtomatizacijo z uporabo cron.
Osnovna nastavitev cron:
# Odpri urejevalnik cron crontab -e
Dodajte vrstico, na primer:
0 2 * * * /usr/local/bin/db_backup.sh
Ta ukaz bo skript zagnal vsak dan ob 2:00 zjutraj.
Napreden pristop z uporabo skripta. Ustvarite /usr/local/bin/db_backup.sh:
#!/bin/bash DATE=$(date +%F) BACKUP_DIR="/backup/$DATE" mkdir -p $BACKUP_DIR # Varnostna kopija PostgreSQL pg_dump -U myuser mydatabase | gzip > $BACKUP_DIR/postgres_mydatabase.sql.gz # Varnostna kopija MySQL mysqldump -u myuser -p mydatabase | gzip > $BACKUP_DIR/mysql_mydatabase.sql.gz # Odstrani varnostne kopije starejše od 7 dni find /backup/ -type f -mtime +7 -delete
Naredite skript izvedljiv:
chmod +x /usr/local/bin/db_backup.sh
In dodajte v cron:
0 2 * * * /usr/local/bin/db_backup.sh
5.2. Priporočila za varnost in shranjevanje
- Shranjevanje izven strežnika: shranjujte varnostne kopije v oblak (AWS S3, Google Cloud) ali na zunanje diske.
- Nadzor dostopa: omejite dostop do mape /backups, saj lahko datoteke vsebujejo zaupne podatke.
chmod 700 /backup
chmod 600 /backup/*.sql.gz
- Preverjanje integritete: mesečno izvajajte testne obnove za preverjanje funkcionalnosti varnostnih kopij.
- Zaupnost: varnostne kopije vsebujejo vsebino baze podatkov — obravnavajte jih kot zaupne informacije.
Zaključek
Uporaba pg_dump in mysqldump je enostaven, zanesljiv in univerzalen način za varnostno kopiranje podatkovnih baz PostgreSQL in MySQL. Ta orodja so primerna tako za ročne varnostne kopije kot za avtomatizirane procese z minimalnim naporom.
Redne varnostne kopije so ključ do stabilnosti vašega projekta in varnosti podatkov.