Бэкапим данные сервера на MEGA
Столкнулся тут с одной проблемой: Яндекс.Диск перестал адекватно перекидывать большие файлы по WebDav. Мелкие файлы без проблем уходят в облако, а вот большие повисают и соответственно задача бэкапа не выполняется.
Порывшись в гугле нашел обсуждение данной проблемы и понял, что решения у нее нет до сих пор, а значит нужно как-то самостоятельно решать проблему бэкапа.
В общем было принято решение перенести все бэкапы на облако от MEGA, которое не только дает 50Гб бесплатно, но и обещает их безопасное хранение. А раз меняется облако, то надо и переписать пару скриптов, которые отвечают за перенос данных.
Для начала необходимо установить специальный пакет MEGAcmd, который позволяет работать с облаком через командую строку. Ранее использовался пакет megatools, но как я понял он уже не поддерживается. Установить MEGAcmd можно двумя путями:
- Скачать уже собранный пакет с официального сайта, выбрав нужную ОС и версию.
- Заморочиться с GitHub и собрать все под себя.
Я решил пойти по второму пути и собрать MEGAcmd под себя, тем более процесс установки полностью описан и достаточно прост.
Но перед установкой обязательно необходимо установить все зависимости! Без них просто не получится корректно собрать MEGAcmd.
Проверить корректность установки можно путем выполнения команды mega-help. Есть вероятность, что вы, как и я, получите ошибку:
error while loading shared libraries: libmega.so.30408: cannot open shared object file: No such file or directory
Чтобы исправить эту ошибку достаточно выполнить команду ldconfig. Данную команду можно выполнить и заранее перед выполнением make install.
Итак, после того как мы установили MEGAcmd и у нас корректно выполнилась команда mega-help мы можем перейти к настройке самого бэкапа.
Я бэкаплю данные ежедневно и соответственно скрипты для бэкапа храню в папке /etc/cron.daily. У вас местоположение скриптов и регулярность бэкапа может быть и другая.
Код скрипта у меня вот такой:
#!/bin/bash # Задаем формат даты TIME=`date +%Y-%b` FILES=/tmp/www.$TIME.tar.gz MYSQL=/tmp/mysql.$TIME.sql.gz # Создаем архив файлов tar -czf $FILES -P /var/www/mysite # Создаем архив базы MySQL mysqldump -u username --password=mypassword dbname --ignore-table=mysql.event | gzip > $MYSQL # Загружаем данные mega-login you@email password mega-put $FILES $MYSQL backups/mysite mega-logout # Удаляем файлы rm $FILES rm $MYSQL
Небольшое уточнение по скрипту. Как видно переменная TIME у меня состоит только из года и названия месяца. Таким образом в течении одного месяца файлы архива будут иметь одинаковое название (например, mysql.2020-Mar.sql.gz) и будут перезаписываться при каждой загрузке. Если вас такой подход не устраивает, то можно в качестве TIME использовать такой вариант: date +%d-%m-%Y, в таком случае имя файла будет иметь вид mysql.28-03-2020.sql.gz.
Проверить корректность работы скрипта можно просто вызвав его через командную строку: /etc/cron.daily/filename.
Подобный подход для создания бэкапов далеко не единственный: вы можете менять скрипты, использовать другое облако (или даже сразу несколько разных), а также использовать не просто загрузку архивов, а синхронизацию отдельной папки с бэкапами. Предложенный выше вариант лично я использую уже достаточно давно и меня он полностью устраивает. Самое главное – никогда не забывайте про бэкапы, иначе ваши труды могут кануть в Лету вместе с жестким диском сервера.