Pereiti prie pagrindinio turinio

Automatinis kopijų kūrimas ir atstatymas VPS serveryje (AlmaLinux)

Š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ą

#!/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 ESC

  • ir veskite :wq

  • spustelė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 + X

  • pasiteiraus ar norite išsaugoti pakeitimus. Patvirtinkite raide y

  • ir 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

Ar gavote atsakymą į savo klausimą?