База знаний

Часто задаваемые вопросы, на которые мы уже ответили

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

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

В этой статье мы разберемся, как настроить регулярное создание резервных копий сайта в связке утилит 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 укажите имя пользователя базы данных и её название. После ключа -p укажите пароль пользователя базы данных. Знак “>” указывает на путь хранилища резервной копии.

/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. Если ваш проект занимает много дискового пространства, рекомендуем рассмотреть вариант создания сжатых бекапов по нашей инструкции.

Была ли эта инструкция полезной?