Создание бекапов в Яндекс.Диск (Ubuntu)

Описание

Скрипт умеет:
- Делать бекапы директорий, например, /etc.
- Делать бекапы поддиректорий (разделяя их), например, /var/www/*.
- Делать дампы MySQL.
- Делать дампы PostgreSQL.
- Загружать все это дело в Яндекс.Диск.

Подготовка

Для начала необходимо получить токен для Яндекс.Диска.

Для этого:
1. Перейдите по этому URL https://oauth.yandex.ru/client/new.
2. Название введите любое, например, “server_backup” без кавычек.
3. Права выберите пункт “Яндекс.Диск REST API” и в нем “Доступ к папке приложения на Диске”.
4. Снизу нажмите “Подставить URL для разработки”.
5. Сохраните.

Вам выдаст подобные результаты:

ID: 61bf56f1e72a4112b83e1db9e44dbe9c
Пароль: 74087cd13d2247c48661c75617916b75
Callback URL: https://oauth.yandex.ru/verification_code
  1. Переходим по URL https://oauth.yandex.ru/authorize?response_type=token&display=popup&client_id=%ID%
    Обратите внимание. Замените в URL выше %ID% на то, что получили выше, т.е. в моем примере - “61bf56f1e72a4112b83e1db9e44dbe9c”.
  2. Нажимаем кнопку “Разрешить”.
  3. Копируем полученный токен и вставляем его в скрипт в YD_TOKEN (см. ниже).

Настройка

Скачайте файл backup_yd.sh и сохраните его на сервере.

Далее, вам необходимо изменить переменные в блоке “Init variables”:

# Базовый путь для сохранения бекапов.
BASE_BACKUP_DIR="/home/user/backups"

# Токен Yandex.Disk.
YD_TOKEN=""

# Пароль от пользователя root СУБД MySQL. Если она не используется, оставьте пустым.
MYSQL_ROOT_PASSWORD=""

# Делать дампы СУБД PostgreSQL?
# Пустая строка - нет
# "1" - да
USE_POSTGRESQL=""

# Список директорий, которые необходимо бекапить.
# В данном примере будет забекаплена директория /etc как архив etc.tar.gz и
# все поддиректории /var/www с соответствующими именами.
declare -a DIRS_FOR_BACKUP=('/etc' '/var/www/*');

# Размеры чанков (т.к. максимальный размер файлов ограничен, то необходимо
# разрезать архив на несколько частей. Чанк - и есть эта часть).
SPLIT_BY="200MiB"

Также, необходимо дать права на запуск:

chmod +x ./backup_yd.sh

Проверяем

Для проверки запустим скрипт:

./backup_yd.sh

В директории %BASE_BACKUP_DIR% будет создана директория с текущей датой, в ней поддиректории для файлов и дампов баз данных.
Все файлы бекапов разрезаются на чанки.

Затем будет произведена загрузка на Яндекс.Диск и директория будет удалена.

Примечание: Чтобы собрать бекап из чанков, используйте команду cat:

cat mybackup.tgz_* > mybackup.tgz

Настраиваем ежедневные бекапы по времени

Запускаем cron:

crontab -e

Добавляем следующую строку (впишите правильный путь до файла backup_yd.sh)

0 3 * * * /bin/bash /home/user/backups/backup_yd.sh

После этого сохраняйте и выходите из редактирования cron.

Все, теперь каждый день в 3 часа ночи будет создаваться новый бекап и загружаться в ваш Яндекс.Диск.

bash