Šioje pamokoje aptarsime, kaip savarankiškai administruojamame Linux VPS serveryje galima paprastai sukurti automatizuotą svetainės failų bei MySQL duomenų bazių atsarginių kopijų generavimo sprendimą.
SVARBU: ypač aktualių duomenų kopijas būtina dubliuoti - kopijuoti ir saugoti į atskiras nutolusias saugyklas ar kitus serverius.
Reikalavimai:
serveris su įdiegta "AlmaLinux" operacine sistema;
root naudotojo prieiga;
serveryje įdiegta MySQL (MariaDB) tarnyba, jei norite kopijuoti duomenų bazes.
1. Įdiekite reikalingus paketus
dnf install rsync tar gzip cronie mariadb -y
1.1 Įjunkite cron tarnybą:
systemctl enable --now crond
1.2 Patikrinkite cron būseną:
systemctl status crond
Jeigu cron veikia, matysite:
Active: active (running)
2. Sukurkite kopijų saugojimo katalogą (backup)
mkdir -p /backup
chmod 700 /backup
3. Sukurkite backup skriptą
Atidarykite failą:
nano /usr/local/bin/backup.sh
Ir jame įklijuokite žemiau pateiktą skriptą:
Rodyti skripto kodą
Rodyti skripto kodą
#!/bin/bash
DATE=$(date +%F)
BACKUP_ROOT="/backup"
BACKUP_DIR="$BACKUP_ROOT/$DATE"
LOG_FILE="$BACKUP_ROOT/backup.log"
echo "[$(date '+%F %T')] Backup started" >> "$LOG_FILE"
mkdir -p "$BACKUP_DIR"
# /home katalogo backup
if [ -d /home ]; then
rsync -a /home/ "$BACKUP_DIR/home/" >> "$LOG_FILE" 2>&1
fi
# /var/www katalogo backup, jei toks egzistuoja
if [ -d /var/www ]; then
rsync -a /var/www/ "$BACKUP_DIR/www/" >> "$LOG_FILE" 2>&1
fi
# MariaDB / MySQL backup
if command -v mariadb-dump >/dev/null 2>&1; then
mariadb-dump --all-databases --single-transaction --routines --events > "$BACKUP_DIR/databases.sql" 2>> "$LOG_FILE"
elif command -v mysqldump >/dev/null 2>&1; then
mysqldump --all-databases --single-transaction --routines --events > "$BACKUP_DIR/databases.sql" 2>> "$LOG_FILE"
else
echo "[$(date '+%F %T')] Database dump tool not found, skipping database backup" >> "$LOG_FILE"
fi
# Archyvo sukūrimas
tar -czf "$BACKUP_ROOT/backup-$DATE.tar.gz" -C "$BACKUP_ROOT" "$DATE" >> "$LOG_FILE" 2>&1
# Laikino katalogo ištrynimas
rm -rf "$BACKUP_DIR"
# Senesnių nei 7 dienų backup ištrynimas
find "$BACKUP_ROOT" -type f -name "backup-*.tar.gz" -mtime +7 -delete
echo "[$(date '+%F %T')] Backup finished" >> "$LOG_FILE"
Išsaugokite failą.
4. Suteikite skriptui vykdymo teises
chmod +x /usr/local/bin/backup.sh
5. Testavimui paleiskite backup rankiniu būdu
/usr/local/bin/backup.sh
Patikrinkite, ar sukurtas backup failas:
ls -lh /backup
Turėtumėte matyti panašų failą:
backup-2026-02-27.tar.gz
backup.log
Patikrinkite išrašą (logą):
cat /backup/backup.log
Jei nėra fiksuotų klaidų, eikime prie tolimesnio automatizavimo žingsnio.
6. Automatizuokite backup su cron
Atidarykite root naudotojo cron užduotis:
crontab -e
Pridėkite eilutę:
0 2 * * * /usr/local/bin/backup.sh
Tai reiškia, kad kopijų (backup) kūrimas bus vykdomas kiekvieną dieną ir 02:00 val. nakties metu.
Daugiau cron kūrimo pavyzdžių galite matyti pamokoje: Periodinės Cron užduotys VPS serveryje.
6.1. Kaip išsaugoti cron pakeitimus
Jei pakeitimus atliekate per vi arba vim redaktorius, norėdami išsaugoti informaciją:
paspauskite
ESCir veskite
:wqspustelėkite
Enter
Sėkmingai išsaugojus matysite:
crontab: installing new crontab
Backup of root's previous crontab saved to /root/.cache/crontab/crontab.bak
Jei pakeitimus atliekate su nano redaktoriumi, pakeitimų išsaugojimui:
paspauskite
Ctrl + Xpasiteiraus ar norite išsaugoti pakeitimus. Patvirtinkite raide
yir nuspauskite
Enter
7. Patikrinkite, ar cron užduotis įrašyta
crontab -l
Turite pamatyti:
0 2 * * * /usr/local/bin/backup.sh
8. ATSTATYMAS: svetainės failų atstatymas
Pirmiausia išarchyvuokite pasirinktą kopijos (backup) failą, pvz.:
tar -xzf /backup/backup-2026-02-27.tar.gz -C /backup/
Po išarchyvavimo atsiras katalogas:
/backup/2026-02-27/
8.1. Atstatykite /home katalogą
rsync -a /backup/2026-02-27/home/ /home/
8.2. Atstatykite svetainės failų katalogą (/var/www)
rsync -a /backup/2026-02-27/www/ /var/www/
Jeigu /var/www backup faile nebuvo, šį žingsnį praleiskite.
9. ATSTATYMAS: duomenų bazių
Jeigu backup archyve yra databases.sql, duomenų bazes galite atstatyti taip:
mysql < /backup/2026-02-27/databases.sql
Jei naudojama MariaDB, tuomet komanda:
mariadb < /backup/2026-02-27/databases.sql
SVARBU: ši komanda gali perrašyti esamas duomenų bazes. Prieš vykdant atstatymą (restore) rekomenduojame turėti papildomą esamos duomenų bazės kopiją.
Naudingos patikrinimo komandos
Patikrinkite backup katalogo dydį:
du -sh /backup
Patikrinkite paskutinius backup išrašus:
tail -n 50 /backup/backup.log
Patikrinkite cron tarnybą:
systemctl status crond
Patikrinkite, ar cron užduotis įrašyta:
crontab -l
Dažniausios problemos
Nesusikuria atsarginės kopijos (backup) failas
Patikrinkite, ar skriptas turi vykdymo teises:
ls -l /usr/local/bin/backup.sh
Jei reikia, dar kartą suteikite teises:
chmod +x /usr/local/bin/backup.sh
Cron tarnyba nesukuria duomenų kopijos:
Patikrinkite, ar crond veikia:
systemctl status crond
Patikrinkite cron užduotį:
crontab -l
Duomenų bazės backup tuščias arba nesusikuria
Patikrinkite, ar MySQL (MariaDB) veikia:
systemctl status mariadb
Jei duomenų bazės naudotojui reikalingas slaptažodis, jį galėsite papildomai nustatyti faile /root/.my.cnf
