Регулярное резервное копирование подразумевает не только создание копий, но и учет дискового пространства: со временем бекапы занимают все больше и больше места. Для экономии дискового пространства стоит сжимать резервные копии. Предлагаем решить задачу с помощью двух инструментов — Ice Storage и утилиты tar.
Ice Storage — дополнительное дисковое пространство на HDD. Мы часто рекомендуем его для хранения архивов и работы веб-приложений, не требующих высокой производительности, однако вы можете использовать Ice Storage для любых своих целей, в нашем случае — для хранения резервных копий.
Каждый storage имеет уникальное имя, оно соответствует имени устройства на боксе (vdb, vdc, vdd и так далее). При этом у каждого хранилища на сервере есть уникальный ID.
Для подключения Ice Storage в одноименном разделе нажмите кнопку «Добавить», выберите желаемый объем и подтвердите выполнение операции. Обратите внимание, что при подключении Ice Storage бокс будет перезагружен.
Ice Storage сразу после подключения будет примонтирован к боксу в директорию /mnt/sprintbox_storage/storage-%ID%. Увидеть точный путь можно с помощью команды 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
Создание и хранение сжатых резервных копий в Ice Storage
На практике рассмотрим, как с помощью утилит tar и mysqldump организовать регулярное резервное копирование.
- Создаем папки для хранения резервных копий файлов и баз данных в Ice Storage:
mkdir /mnt/sprintbox_storage/storage-123/files-backup-folder mkdir /mnt/sprintbox_storage/storage-123/db-backup-folder
- Открываем планировщик задач Cron:
crontab -e
- Добавляем в crontab задания:
30 0 * * * tar -czf tar czf /mnt/sprintbox_storage/storage-123/files-backup-folder/backup-$(date +%y%m%d).tar.gz --exclude=/home --exclude=/media --exclude=/dev --exclude=/mnt --exclude=/proc --exclude=/sys --exclude=/tmp / 30 0 * * * mysqldump --opt -u db_user -p password db_name > /mnt/sprintbox_storage/storage-123/files-backup-folder/database-backup-$(date +%y%m%d).sql
Оба задания будут выполняться каждый день, в 00:30. Рассмотрим каждое из заданий подробнее.
В первом задании средствами утилиты tar создается архив со всеми каталогами и файлами виртуальной машины, исключая папки /home, /media, /dev, /mnt, /proc, /sys, /tmp. По желанию, вы можете удалить или добавить необходимые каталоги в список исключений, используя ключ --exclude=/folder_name. Не забудьте изменить путь к вашему Ice Storage в задании.
Во втором задании средствами утилиты mysqldump будет создаваться резервная копия базы данных db_name. Измените путь для размещения резервной копии в задании на необходимый, а также вместо db_user, db_name и password укажите актуальные значения имя пользователя базы данных, название базы данных и пароль.
Обратите внимание на формат названий файлов:
backup-$(date +%y%m%d).tar.gz database-backup-$(date +%y%m%d).sql
Такой формат позволяет указать в имени резервной копии дату создания (год-месяц-день). Названия бекапов будут выглядеть следующим образом:
backup-19-09-15.tar.gz database-backup-19-09-15.sql
В данной инструкции мы рассмотрели возможность создания и хранения резервной копии сайта в виде архива. Если вы заинтересованы в создании несжатых резервных копий для быстрого восстановления, то обратите внимание на инструкцию по созданию бекапов с помощью утилиты rsync.