*Cube-Host — повний спектр хмарних послуг!!

Автоматизація резервного копіювання на VPS під управлінням Linux

Automating backups on a Linux VPS

Автоматичне резервне копіювання є основою для роботи будь-яких виробничих систем на VPS під управлінням Linux. Навіть стабільний сервер може зазнати наслідків випадкового видалення, пошкодження файлової системи, невдалих оновлень або злому облікового запису.

У цьому посібнику наведено практичну схему резервного копіювання: що слід включити, як створювати щоденні архіви, як зберігати копії поза межами локації та як перевіряти відновлення. Якщо ви хостите реальні проекти, почніть із надійного VPS на базі Linux із достатнім обсягом пам’яті та стабільною продуктивністю диска, щоб виконувати резервне копіювання без впливу на користувачів.

Стратегія резервного копіювання для VPS на базі Linux

Перш ніж писати будь-які скрипти, визначте просту стратегію. Це підвищує надійність, а також значно полегшує усунення несправностей у майбутньому.

  • RPO (Recovery Point Objective): скільки даних ви можете дозволити собі втратити (наприклад, за останні 24 години).
  • RTO (цільовий час відновлення): як швидко ви повинні відновити роботу сервісу (хвилини чи години).
  • Зберігання: скільки днів/тижнів резервних копій ви зберігаєте (наприклад, 7 щоденних 4 щотижневих).
  • Зовнішня копія: ніколи не зберігайте резервні копії лише на тому самому VPS.
  • Тестування відновлення: резервна копія, яку ви ніколи не відновлюєте, — це лише файл, а не план.

Що слід резервувати

Для більшості веб-сайтів та додатків набір резервних копій, який «обов’язково потрібно мати», виглядає так:

  • Файли веб-сайту/додатку (зазвичай /var/www/)
  • Конфігурації системи та служб (/etc/)
  • Дані користувачів (/home/)
  • Бази даних (дампи MySQL/MariaDB/PostgreSQL)
  • SSL-сертифікати (зазвичай у /etc/letsencrypt/ або у шляхах конфігурації вашого веб-сервера)
  • Секретні дані додатків та файли середовища (там, де їх зберігає ваш додаток)

Порада: Якщо ваш VPS використовується для контейнерів (Docker), зазвичай потрібно створювати резервні копії постійних томів та конфігурацій додатків, а не шарів контейнерів.

Створіть безпечну папку для резервних копій

Створіть спеціальну папку для резервних копій із суворими правами доступу. Це запобігає доступу інших користувачів/процесів до конфіденційних резервних копій.

sudo mkdir -p /backup
sudo chown root:root /backup
sudo chmod 700 /backup

Важливо: Переконайтеся, що шлях до резервних копій не знаходиться всередині каталогу вашого веб-сайту (наприклад, не в папці /var/www), інакше ви можете випадково оприлюднити архіви через HTTP.

Варіант 1: Створіть просту архівну резервну копію за допомогою tar

Щоденний стиснений архів — це хороший базовий варіант. Використовуйте виключення, щоб уникнути резервного копіювання віртуальних файлових систем та запобігти рекурсивним саморезервуванням.

sudo tar -czf /backup/backup-$(date  %F).tar.gz 
  --one-file-system 
  --exclude=/backup 
  --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run 
  /var/www /etc /home

Якщо ваш VPS завантажений, ви можете зменшити навантаження від резервного копіювання, використовуючи пріоритет процесора та вводу-виводу:

sudo nice -n 19 ionice -c3 tar -czf /backup/backup-$(date  %F).tar.gz 
  --one-file-system 
  --exclude=/backup 
  --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run 
  /var/www /etc /home

Що означають опції tar

  • -c — створити архів
  • -z — стиснення gzip
  • -f — вихідний файл
  • --one-file-system — не перетинати точки монтування (допомагає уникнути несподіванок)

Резервне копіювання баз даних

Для більшості виробничих серверів самих файлів недостатньо. Додайте дампи баз даних до вашої процедури резервного копіювання (бажано зберігати їх разом з архівами).

MySQL / MariaDB (дамп усіх баз даних)

sudo mysqldump --all-databases --single-transaction --routines --events 
  | gzip > /backup/mysql-all-$(date  %F).sql.gz

Порада: Для автоматизації безпечно налаштуйте облікові дані (наприклад, у /root/.my.cnf) замість того, щоб вказувати паролі в cron.

PostgreSQL (дамп усіх баз даних)

sudo -u postgres pg_dumpall | gzip > /backup/postgres-all-$(date  %F).sql.gz

Перевірка резервних копій

Завжди перевіряйте, чи файли існують і чи можна їх прочитати. Архів розміром у нуль байт або пошкоджений дамп можуть з’явитися непомітно, якщо ви ніколи не перевіряєте.

ls -lh /backup
tar -tzf /backup/backup-$(date  %F).tar.gz | head

Для більшої впевненості генеруйте контрольні суми (корисно для передачі даних за межі локації):

cd /backup
sha256sum backup-$(date  %F).tar.gz > backup-$(date  %F).tar.gz.sha256

Створіть скрипт резервного копіювання (рекомендується)

Замість складних однорядкових команд у cron, вкладіть свою логіку у скрипт. Це значно спростить ведення журналу, зберігання та синхронізацію за межами сайту.

sudo nano /usr/local/sbin/backup-vps.sh

Приклад скрипта (відредагуйте шляхи відповідно до вашого сервера):

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/backup"
DATE="$(date  %F)"
HOST="$(hostname -s)"
RETENTION_DAYS="7"

ARCHIVE="${BACKUP_DIR}/${HOST}-files-${DATE}.tar.gz"
MYSQL_DUMP="${BACKUP_DIR}/${HOST}-mysql-${DATE}.sql.gz"
PG_DUMP="${BACKUP_DIR}/${HOST}-postgres-${DATE}.sql.gz"

mkdir -p "${BACKUP_DIR}"
chmod 700 "${BACKUP_DIR}"

# 1) Files archive (adjust folders if needed)
nice -n 19 ionice -c3 tar -czf "${ARCHIVE}" 
  --one-file-system 
  --exclude=/backup 
  --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run 
  /var/www /etc /home

# 2) MySQL/MariaDB dump (optional: remove if you don't use MySQL)
if command -v mysqldump >/dev/null 2>&1; then
  mysqldump --all-databases --single-transaction --routines --events 
    | gzip > "${MYSQL_DUMP}" || true
fi

# 3) PostgreSQL dump (optional: remove if you don't use PostgreSQL)
if command -v pg_dumpall >/dev/null 2>&1 && id postgres >/dev/null 2>&1; then
  sudo -u postgres pg_dumpall | gzip > "${PG_DUMP}" || true
fi

# 4) Checksums (helpful for integrity checks after transfers)
cd "${BACKUP_DIR}"
sha256sum "$(basename "${ARCHIVE}")" > "$(basename "${ARCHIVE}").sha256"

# 5) Retention cleanup
find "${BACKUP_DIR}" -type f -name "${HOST}-files-*.tar.gz" -mtime  "${RETENTION_DAYS}" -delete
find "${BACKUP_DIR}" -type f -name "${HOST}-mysql-*.sql.gz" -mtime  "${RETENTION_DAYS}" -delete
find "${BACKUP_DIR}" -type f -name "${HOST}-postgres-*.sql.gz" -mtime  "${RETENTION_DAYS}" -delete
find "${BACKUP_DIR}" -type f -name "${HOST}-files-*.tar.gz.sha256" -mtime  "${RETENTION_DAYS}" -delete

echo "Backup completed: ${DATE}"

Зробіть його виконуваним:

sudo chmod  x /usr/local/sbin/backup-vps.sh

Автоматизуйте резервне копіювання за допомогою Cron

Заплануйте щоденне виконання скрипта (наприклад, о 03:00). Відредагуйте кореневий crontab:

sudo crontab -e

Додайте наступний рядок:

0 3 * * * /usr/local/sbin/backup-vps.sh >> /var/log/backup-vps.log 2>&1

Порада: Перевірте журнали після першого запуску: tail -n 50 /var/log/backup-vps.log

Перенесіть резервні копії за межі сайту (rsync)

Не зберігайте резервні копії лише на тому самому VPS. Основним і надійним підходом є копіювання резервних копій на другий сервер за допомогою rsync через SSH.

1) Створіть ключ SSH (на VPS)

sudo ssh-keygen -t ed25519 -a 64 -f /root/.ssh/id_ed25519 -N ""

2) Скопіюйте ключ на віддалений сервер резервного копіювання

sudo ssh-copy-id backupuser@remote-server

3) Синхронізуйте папку резервних копій

sudo rsync -az /backup/ backupuser@remote-server:/remote-backup/$(hostname -s)/

Якщо ви хочете, щоб цей процес був автоматизований, заплануйте його після створення резервної копії (наприклад: 03:30):

30 3 * * * rsync -az /backup/ backupuser@remote-server:/remote-backup/$(hostname -s)/ >> /var/log/backup-vps-rsync.log 2>&1

Тестове відновлення (швидка перевірка працездатності)

Принаймні час від часу виконуйте тестове відновлення у тимчасовий каталог. Це найшвидший спосіб виявити проблеми з правами доступу, відсутні шляхи або пошкоджені архіви.

sudo mkdir -p /tmp/restore-test
sudo tar -xzf /backup/$(hostname -s)-files-$(date  %F).tar.gz -C /tmp/restore-test
ls -la /tmp/restore-test | head

А також перевіряйте контрольні суми, якщо ви їх використовуєте:

cd /backup
sha256sum -c $(hostname -s)-files-$(date  %F).tar.gz.sha256

Кращі практики безпеки для резервних копій VPS

  • Зберігайте /backup приватними: chmod 700 і належними root.
  • Використовуйте SSH-ключі для передачі даних за межі локації (якщо можливо, вимкніть аутентифікацію за паролем на сервері резервного копіювання).
  • Якщо резервні копії містять конфіденційні дані, розгляньте можливість шифрування архівів перед зберіганням поза межами локації.
  • Зберігайте секретні дані безпечно (не вказуйте паролі до БД у скриптах cron).
  • Моніторинг резервних копій: перевіряйте файли журналів, розміри файлів та час останньої модифікації.

Коли слід оновлювати VPS

Якщо резервне копіювання займає занадто багато часу, під час стиснення спостерігаються стрибки завантаження процесора або вхід/вихід диска стає вузьким місцем, ви отримаєте більш передбачувану автоматизацію на потужнішому VPS під управлінням Linux з кращою продуктивністю системи зберігання даних та додатковими ресурсами — особливо якщо ви використовуєте великі бази даних або керуєте декількома веб-сайтами.

Часті запитання

Як часто слід виконувати резервне копіювання?

Для більшості сайтів щоденні резервні копії — це мінімум. Якщо дані часто змінюються (замовлення, повідомлення, завантаження), розгляньте можливість більш частого створення дампів бази даних (наприклад, кожні 1–6 годин) з більш тривалим терміном зберігання.

Чи знімки VPS — це те саме, що резервні копії?

Ні. Знімки можуть бути корисними, але вони не є повноцінною стратегією резервного копіювання. Вам все одно потрібні незалежні копії поза межами сайту та тестування відновлення.

Як довго слід зберігати резервні копії?

Простий і ефективний підхід — це 7 щоденних резервних копій плюс щотижневі/щомісячні архіви для тривалішого зберігання, залежно від потреб вашого бізнесу та бюджету на зберігання даних.

Яка найбільша помилка, яку роблять люди?

Зберігання резервних копій лише на тому самому VPS та відсутність тестування відновлення. Тестування відновлення поза місцем розташування — це те, що перетворює «резервні копії» на реальне відновлення.

Впровадьте VPS на базі Linux, готовий до автоматичного резервного копіювання

Хочете передбачувані завдання резервного копіювання, стабільну продуктивність та достатньо місця для архівів і дампів баз даних? Почніть із надійного VPS на базі Linux та автоматизуйте щоденне резервне копіювання та синхронізацію поза майданчиком із першого дня.

Prev
Menu