Искать в Базе знаний

Создание быстрых бекапов

Порой в ходе проекта резервные копии нужны “под рукой”: когда компоненты обновляются часто, появляется необходимость в быстром восстановлении, если что-то пойдет не так. Если мы ставим задачу организовать быстрый доступ к резервным копиям, то архивирование данных не подойдет — распаковка архива занимает время, и порой немалое.
В этой статье мы разберемся, как настроить регулярное создание резервных копий сайта в связке утилит rsync и mysqldump.
Перед тем как приступить к инструкции, стоит отметить недостаток данного метода — резервные копии будут храниться на диске не в сжатом виде, в силу чего бекапы будут занимать больше места, нежели архивированные данные.

Подготовка хранилища

В примере разобрано размещение резервных копий на Ice Storage — изолированном хранилище, что позволит работать с бекапами вне носителя, где размещен рабочий проект. В статье мы рассказали, почему важно хранить бекапы на отдельном диске.
  • Переходим в личный кабинет и подключаем Ice Storage необходимого размера в меню управления боксом. Бокс будет перезагружен во время подключения Ice Storage.
  • Подключаемся по SSH к боксу. Чтобы узнать путь к Ice Storage, выполняем команду lsblk:
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0       11:0      1  366K   0 rom  
    vda      254:0    0    32G   0 disk 
    └vda1 254:1    0    32G   0 part /
    vdb      254:16  0    32G   1 disk 
    └vdb1 254:17  0    32G   1 part /mnt/sprintbox_storage/storage-123
    Вместо /mnt/sprintbox_storage/storage-123 отобразится актуальный путь к хранилищу.
  • Переходим в хранилище и создаем папки, где будут хранится резервные копии файлов и баз данных:
    cd /mnt/sprintbox_storage/storage-123/ && mkdir file-backups-storage database-backups-storage
Хранилище для бекапов готово.

Установка rsync и настройка резервного копирования

rsync — удобная утилита для копирования файлов и каталогов.
Устанавливаем rsync командой:
Debian / Ubuntu:
apt-get install rsync
CentOS:
yum install rsync
Перейдем в корневой каталог пользователя и создадим bash-скрипт backup-tool.sh:
cd ~/ && touch backup-tool.sh
Заполним его содержимым:
now=`date +"%m_%d_%Y_%k:%M:%S"`
rsync -av /var/www/www-root/data/www/domain.ru/ /mnt/sprintbox_storage/storage-123/file-backups-storage/domain.ru-backup-$now/
mysqldump -u wpress_dbuser -p9E7v9Q8j wpress_database > /mnt/sprintbox_storage/storage-123/database-backups-storage/database-dump-$now.sql
/usr/bin/find /mnt/sprintbox_storage/storage-123/file-backups-storage/ -type d -name "domain.ru-backup-*" -ctime 7 -exec rm -rf {} \;
/usr/bin/find /mnt/sprintbox_storage/storage-123/database-backups-storage/ -type f -name "database-dump-*" -ctime 7 -exec rm -rf {} \;
Подробно рассмотрим, что означает каждая строка.
Первая строка записывает в переменную now текущее время на сервере в формате: месяц-день-год-час:минута:секунда. В дальнейшем мы укажем переменную в имени бекапов. Например, папка с бекапом будет иметь вид:
domain.ru-backup-09_19_2019_17:02:06
Вторая строка состоит из трех частей:
  • rsync -av — вызов утилиты rsync в архивном режиме. Архивный режим использует рекурсивное копирование, а также сохранение прав и владельца на файлы и каталоги.
  • /var/www/www-root/data/www/domain.ru/ - путь к корневой папке сайта.
  • /mnt/sprintbox_storage/storage-123/file-backups-storage/domain.ru-backup-$now/ — путь до хранилища, где будет размещен бекап. Обратите внимание на название папки domain.ru-backup-$now. В имя папки с бекапом запишется значение переменной now, т.е. время, в которое началось создание бекапа.
Третья строка:
  • mysqldump -u wpress_dbuser -p9E7v9Q8j wpress_database > — вызов утилиты mysqldump для экспорта резервной копии базы данных. Вместо wpress_dbuser и wpress_database укажите имя пользователя базы данных и её название. После ключа укажите пароль пользователя базы данных. Знак указывает на путь хранилища резервной копии.
  • /mnt/sprintbox_storage/storage-123/database-backups-storage/database-dump-$now.sql — путь к хранилищу бекапов баз данных. В имени бекапа также будет записано серверное время.
Четвертые и пятые строки имеют общую структуру:
  • /usr/bin/find — вызов утилиты find, предназначенной для поиска файлов по определенным критериям.
  • /mnt/sprintbox_storage/storage-123/file-backups-storage/ - путь к каталогу, в котором будет выполняться поиск.
  • -type — данный ключ указывает на то, что мы собираемся найти. Значение d указывает на поиск каталогов, а f - на поиск файлов.
  • -ctime 7 — с помощью ключа ctime указываем, какой давности в днях нам требуется найти файлы. Вместо 7 укажите желаемое количество дней.
  • -delete — данный ключ означает, что обнаруженные файлы и каталоги будут удалены.
Не забудьте изменить пути в скрипте на актуальные.
Итого: скрипт скопирует содержимое сайта в хранилище, туда же выгрузит резервную копию базы данных, найдет бекапы недельной давности и удалит их.

Добавление задания в Сron

Чтобы резервные копии создавались регулярно, настроим выполнение созданного скрипта в cron. Для этого:
  • Откроем crontab:
    crontab -e
  • Добавим задание:
    30 0 * * * bash ~/backup-tool.sh
  • Сохраняем изменения.
Готово! Каждый день, в 00:30 в Ice Storage будет сохраняться резервная копия файлов сайта и используемая база данных.

Восстановление из резервной копии

Для восстановления из резервной копии потребуется:
  • Предварительно переименуем корневой каталог сайта:
    mv /var/www/www-root/data/www/domain.ru/ /var/www/www-root/data/www/domain.ru-bak
  • Создадим новый корневой каталог и скопируем туда содержимое бекапа:
    mkdir /var/www/www-root/data/www/domain.ru && cp -r /mnt/sprintbox_storage/storage-123/file-backups-storage/domain.ru-backup-09_19_2019_17:02:06/* /var/www/www-root/data/www/domain.ru/
  • Предварительно выгрузим текущее состояние базы данных:
    mysqldump -u wpress_dbuser -p9E7v9Q8j wpress_database > /var/www/www-root/data/www/domain.ru/mysql-dump.sql
  • Импортируем бекап в базу данных:
    mysql -u wpress_dbuser -p9E7v9Q8j wpress_database < /mnt/sprintbox_storage/storage-123/database-backups-storage/database-dump-09_19_2019_17:02:06.sql
Проверяем работу сайта. Если всё работает исправно, то удалите ранее переименованный корневой каталог.
В данной статье мы рассмотрели возможность создания и хранения бекапов на Ice Storage, созданных в связке утилит rsync и mysqldump. Если ваш проект занимает много дискового пространства, рекомендуем рассмотреть вариант создания сжатых бекапов по нашей инструкции.
2005–2025 ООО «СПРИНТХОСТ.РУ»
Входит в Реестр аккредитованных ИТ-компаний
и Реестр провайдеров хостинга
Лицензия №162552