Резервное копирование Linux: простые способы
Резервное копирование – это единственная гарантия быстрого восстановления вашего проекта после сбоя, ошибки или взлома.
На виртуальном сервере с root-доступом вы несете полную ответственность за сохранность данных. Без работающей системы бэкапов один неверный аргумент в команде rm -rf, сбой диска или критическая уязвимость в ядре Linux (как недавняя Fragnesia) могут привести к полной потере сайта, базы данных и конфигураций.
Зачем вашему VPS жизненно необходимы резервные копии
VPS предоставляет вам не только полный контроль, но и увеличивает ответственность. Надежный хостинг-провайдер, такой как Mnogoweb, гарантирует стабильность инфраструктуры и доступность сервера по SLA, однако не страхует от рисков внутри вашей операционной системы.
Ключевые угрозы, от которых защищают бэкапы:
- Ошибки администратора: случайное удаление критических файлов или ошибочное изменение конфигураций.
- Сбои оборудования: выход из строя диска (NVMe/SSD), что может привести к повреждению файловой системы.
- Взлом и уязвимости: эксплуатация уязвимостей (например, недавно найденные уязвимости в ядре Linux), позволяющих злоумышленнику получить права root. Следы таких атак иногда исчезают после перезагрузки, что усложняет диагностику и делает восстановление из чистой копии единственным надежным решением.
- Неудачные обновления: сбой при обновлении ядра, пакетов, CMS (WordPress, Joomla и других) или критических библиотек.
- Повреждение базы данных: ошибки в запросах, сбои СУБД или атаки типа SQL-инъекций.
Бэкап – это не дополнительная опция, а обязательный элемент эксплуатации любого сервера, от небольшого сайта до корпоративного приложения.
Что именно копировать на Linux-сервере
Вместо абстрактного «бэкапить всё» сфокусируйтесь на конкретных категориях данных. Начните с самого ценного для вашего проекта.
- Файлы проекта: корневая директория сайта (часто
/var/wwwили/home/<user>/www), исходный код приложений, загруженные пользователями изображения, документы и другие файлы. - Базы данных: содержимое MySQL, MariaDB, PostgreSQL или SQLite базы, используемой проектом. Это основа динамических сайтов, интернет-магазинов и систем управления.
- Конфигурации: файлы из директории
/etc: это конфиги веб-сервера (Nginx, Apache), настройки SSH, firewall, системных служб, а также задания cron. - Данные пользователей: домашние директории системных пользователей в папке
/home, файлы почтовых ящиков, логи приложений для анализа.
Простые инструменты для бэкапов
Для настройки резервного копирования не всегда нужны сложные коммерческие системы. В Linux есть все необходимые инструменты.
Архивация данных с помощью tar
Утилита tar создает цельные архивные копии, идеальные для долгосрочного хранения или переноса проекта.
Например, если проект хранится в папке /var/www/project, команда будет следующей:
tar -czpf /backup/site-$(date +%Y%m%d).tar.gz /var/www/project/ --exclude='/var/www/project/cache'Разберем ключи: -c – создать архив, -z – сжать с помощью gzip, -p – сохранить права доступа, -f – указать имя файла. Опция --exclude позволяет исключить временные или кэшированные данные, экономя место.
Синхронизация и копирование через rsync
Rsync – это инструмент для эффективного инкрементального копирования. Он передает только измененные части файлов, что экономит время и трафик.
Локальная синхронизация на отдельный раздел:
rsync -av /var/www/ /backup/www/Копирование на удаленный сервер (например, отдельный VPS для бэкапов) по SSH:
rsync -avz -e ssh /var/www/ user@backup-server.ru:/backups/Ключи: -a – архивный режим (сохраняет атрибуты), -v – подробный вывод, -z – сжатие при передаче.
Создание дампа базы данных MySQL/MariaDB
Для резервирования базы данных используйте mysqldump. Для таблиц InnoDB применяйте опцию --single-transaction, чтобы не блокировать записи на время создания дампа.
Пример команды для копирования БД database пользователя username:
mysqldump -u username -p --single-transaction database > /backup/db-$(date +%Y%m%d).sqlВосстановление из дампа выполняется командой:
mysql -u username -p database < /backup/db-20250514.sqlКак настроить Cron для регулярных бэкапов
Ручные бэкапы ненадежны, поскольку их нужно запускать вручную, что может забыться в потоке работы и прочих дел. Планировщик задач Cron превращает такие ручные команды в автоматическую систему.
Пример рабочего скрипта для Cron
Создайте файл /root/backup.sh с таким содержимым:
#!/bin/bash
# Настройки
BACKUP_DIR="/backup"
DB_NAME="database"
DB_USER="username"
DB_PASSWORD="password"
SITE_ROOT="/var/www"
REMOTE_HOST="user@backup-server.ru"
REMOTE_DIR="/backups"
DATE=$(date +%Y%m%d)
# Дамп базы данных
mysqldump -u $DB_USER -p$DB_PASSWORD --single-transaction $DB_NAME > $BACKUP_DIR/db-$DATE.sql 2>> /var/log/backup.log
# Архивирование файлов сайта
tar -czpf $BACKUP_DIR/site-$DATE.tar.gz $SITE_ROOT 2>> /var/log/backup.log
# Копирование на удаленный сервер
rsync -avz $BACKUP_DIR/db-$DATE.sql $BACKUP_DIR/site-$DATE.tar.gz $REMOTE_HOST:$REMOTE_DIR/ 2>> /var/log/backup.log
# Проверка выполнения
if [ $? -eq 0 ]; then
echo "[$DATE] Backup completed successfully" >> /var/log/backup.log
else
echo "[$DATE] Backup FAILED!" >> /var/log/backup.log
fiНе забудьте дать скрипту права на выполнение:
chmod +x /root/backup.shАвтоматическое удаление старых бэкапов
Чтобы диск не переполнялся, можно добавить в скрипт команду для автоматического удаления копий старше, например, 30 дней:
# Удаление локальных бэкапов старше 30 дней
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
find $BACKUP_DIR -name "*.sql" -mtime +30 -deleteНастройте запуск скрипта ежедневно в 2:00 ночи, добавив задание в Cron. Обычно это делается командой crontab -e или путём добавления файла в папку /etc/cron.d.
0 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1Где хранить резервные копии?
Хранение бэкапа на том же сервере – это иллюзия защиты. При физическом сбое диска в сервере, при аварии в дата-центре вы рискуете потерять и основной сервер, и все копии. Следуйте правилу «3-2-1»: три копии данных, на двух разных серверах, одна копия – обязательно вне площадки.
- Отдельный диск или раздел на том же сервере: лучше, чем ничего, но не спасёт вас от сбоя всего сервера.
- Другой VPS в иной локации: аренда недорогого виртуального сервера с большим диском специально для бэкапов – эффективное решение. Вы можете развернуть такой сервер в другой стране или на другом конце страны для дополнительной отказоустойчивости.
- Специализированное облачное хранилище: используйте FTP-хранилище или S3-совместимые сервисы, как правило это уже готовая и масштабируемая инфраструктура для хранения данных. Также можно воспользоваться DropBox, Яндекс.Диск и аналогичными сервисами.
- Локальный компьютер: для критически важных данных важно не забывать периодически скачивать бэкапы.
Для российских проектов оптимальным решением будет размещение основного сервера и хранилища бэкапов в России. Например, Mnogoweb предлагает серверы в Москве и в Новосибирске.
Проверка надёжнои системы
Настроить создание бэкапов – только половина дела. Нужно ещё сделать построенную систему гарантированно рабочей.
- Главное правило: периодически проверяйте восстановление из бэкапа на тестовом стенде. Бэкап, который не проверен на восстановление, это не бэкап. Раз в квартал проверяйте, что архив распаковывается, а дамп базы данных успешно импортируется.
- Автоматизация надежнее ручных действий: доверьте работу Cron и скриптам.
- Настройте мониторинг: добавьте в скрипт отправку уведомления на email или в мессенджер в случае ошибки, регулярно проверяйте логи.
- Документируйте процесс восстановления: в критической ситуации не будет времени вспоминать последовательность команд, создайте чёткий чеклист: остановить сервисы, распаковать архив, импортировать БД, проверить конфиги.
- Защищайте сами бэкапы: по возможности старайтесь храните их в зашифрованном виде, особенно при использовании облачных хранилищ, и ограничивайте доступ по SSH ключам, а не паролям.
Создание отказоустойчивой инфраструктуры начинается с выбора правильного хостинга. Надёжные и производительные виртуальные серверы на базе KVM-виртуализации с быстрыми дисками вы найдете в Mnogoweb.
Для проектов, требующих максимальной скорости в России, рассмотрите VPS в Москве или VPS в Новосибирске.