Бэкап файловых и SQL баз 1С средствами Effector Saver (в облако и с шифрованием)

?v=1

В этой статье я хочу поделиться опытом резервного копирования файловых и SQL баз 1С в локальное, сетевое и облачное (на примере Google Drive) хранилище с помощью Effector Saver.

Писал инструкцию для друга, но думаю она пригодиться и кому-то из вас.
И как всегда, в комментариях, вы научите меня чему-то новому =)
В конце инструкции приведен пример журнала, по которому хорошо видна скорость выполнения задачи.

Цель:
Автоматическое создание шифрованных бэкапов по расписанию с отчётом об ошибках на почту.
Логика бэкапов:
* Ежедневно последние 30 шт (срок хранения 1 месяц)
* Ежемесячно 1 числа последние 24 шт (срок хранения 2 года)
* Ежегодно 1 февраля последние 10 шт (срок хранения 10 лет)
* Бэкапы выгружаются в хранилище бэкапов (локальное или сетевое) из под учётки backup
* Бэкапы выгружаются в облако Goole Drive (возможно с собственным OAuth ID Client/Secret)
* Отправка отчета об ошибках на электронную почту

Небольшое пояснение
* Данная инструкция приводится как готовый пример использования, который можно и нужно
адаптировать под свои задачи.
* Задания могут запускаться в одно время, т.к. поддерживается параллельное выполнение
заданий, что ощутимо сокращает время для бэкапов.
* Дополнительное копирование выполняется на основе задачи, т.е. выполняется копирование последнего уже созданного бэкапа. Например, если дополнительное копирование должно быть выполнено 10 числа, а бэкап выбранной задачи от 10 числа завершился с ошибкой (а мы не стали вмешиваться), то дополнительное копирование сделает копию для последнего успешного бэкапа выбранной задачи, в нашем примере будет от 9 числа.
* В программе можно настроить выгрузку баз средствами 1С в виде .dt файлов, с автоматической блокировкой/разблокировкой базы и выкидыванием пользователей. В данной инструкции такой способ не рассматривается, как ненадежный способ резервного копирования формата .dt.

1. Установка и настройка
Устанавливаем Effector Saver, запускаем.
— Сервис > Параметры

  • Автозагрузка
    Запускать как служба Windows (сервер)
    пользователь backup, пароль свой
    Пояснения по пользователю backup, для чего отдельная учетка
    Для бэкапов считаю важным создавать и использовать отдельную учетную запись, например backup. Это может быть как локальная так и доменовская учетка.
    Доступ к хранилищу бэкапов для админов должен быть настроен для чтения, и только у учетки backup на запись. Это позволит защитить ваши бэкапы от многих опасностей (дурная голова, вирусы). А если вам понадобится внести какие-то изменения в хранилище бэкапов, то всегда можно дать себе временны доступ, или запустить любой проводник (например Total Commander) от имени учетки backup для полного доступа к хранилищу.

  • Параметры агента
    Разрешить параллельную работу потоковых задач: 5
    Выбираем от мощности сервера и скорости канала интернет (для выгрузки в облако)
    Использовать указанный каталог временных файлов:
    \\NAS\Backup\Temp
    Пояснения по использованию сетевого пути
    Сетевую папку желательно разместить на компьютере с программой Effector Saver, т.е. по факту для нас это будет локальная папка (если скорость позволяет, то и любой другой сетевой путь)
    Доступ к папке Temp (каталог временных файлов) должен быть:
    для backup на запись
    для учетки из под которой работает служба MS SQL Server на запись
    админам на чтение

    К сожалению Effector Saver не сообщает о своей особенности пользователю, когда тот настраивает резервное копирование SQL баз. Effector Saver считает что SQL сервер находится на том же компьютере, что и он. Когда создается бэкап SQL базы, то серверу SQL передается путь для временной папки буквально, и SQL сервер выгружает бэкап в свою локальную временную папку. После чего Effector Saver не может найти бэкап в своей временной папке и вываливает ошибку.
    Чтобы обойти это ограничение, мы выбираем сетевой путь для временной папки. Тогда SQL сервер будет получать сетевой путь и будет выгружать бэкап по этому адресу.
    В будущих версиях разработчики обещали подумать над тем, чтобы добавить настройку для задач SQL бэкапов, в которой можно будет прописать сетевой путь для выгрузки, и не менять общий путь к временным папкам.

  • Параметры менеджера
    Устанавливаем пароль, если к программе может получить доступ нежелательный пользователь.
  • Файлы архивов
    Варианты окончания имени архива: yyyy.mm.dd_hh.nn.ss
    Для эстетики и имя без пробелов (старая привычка)
  • Служебные
    OAuth данные приложения в облаке — Обновить данные ClientID / ClientSecret
    Тут вносить изменения не обязательно, но как всегда есть небольшое НО
    Недавно я получил ошибку выгрузки бэкапов в облако из-за превышения лимитов OAuth Effector Saver. Ошибка была только один раз, разработчики устранили эту проблему, но зачем ждать её снова. Я решил получить свой OAuth на Google Диск и забыть об этом.
    Инструкция с картинками, как получить свой Client ID и Secret нашел тут: https://github.com/Cloudbox/Cloudbox/wiki/Google-Drive-API-Client-ID-and-Client-Secret


2. Подготовка
— Сервис > Управление хранилищами > Создать

  • Локальная/сетевая папка:
    Тут все понятно, следуя нашей логике бэкапов (в начале статьи) создаем 3 хранилища для удобства
    \\NAS\Backup\EveryDay
    \\NAS\Backup\EveryMonth
    \\NAS\Backup\EveryYear
  • Google диск:
    Создаем подключение к облаку Google диск.
    Название дадим по нашей логике: EveryDay
    Жмем кнопку Авторизация, вводим логин/пароль, готово.
    Если вы это настраиваете удаленно на сервере или чужом компьютере
    То можно выполнить авторизацию альтернативным способом. Закрываем окно ввода логина и пароля — появится ошибка авторизации — жмем кнопку Пользовательский режим, далее жмем по ссылке Получить код подтверждения ссылка авторизации откроется в браузере. Ссылку копируем к себе на компьютер, авторизуемся у себя на компьютере, подтверждаем права доступа, получаем ключ, копируем его обратно в поле окна Авторизация приложения в пользовательском режиме, жмем ОК
    Выбираем путь к папке в облаке, аналогично:
    Backup/EveryDay

    Дополнительные облачные хранилища для ежемесячных и ежегодных копий делаем через копирование (Создать > Скопировать)
    В итоге получаем 3 облачных хранилища:
    EveryDay (Google Диск)
    EveryMonth (Google Диск)
    EveryYear (Google Диск)
    На этом настройка Управление хранилищами закончена.


3. Создание задач резервного копирования

3.1. Задачи > Добавить задачу > Резервное копирование файлов и баз данных (SQL)

  • Основные параметры
    Включить в архив бэкап базы SQL (на примере Microsoft SQL Server)
  • База Microsoft SQL
    Прописываем все реквизиты.
    Проверяем, что на MS SQL сервере открыт TCP 1433 порт.
    Жмем: Проверить
  • Хранилище архивов
    — Добавляем хранилище \\NAS\Backup\EveryDay
    Автоматически удалять устаревшие резервные копии: 30
    — Добавляем хранилище EveryDay (Google Диск)
    Автоматически удалять устаревшие резервные копии: 30
  • Файл архива
    Имя файла архива: название базы
    Окончание имени архива: yyyy.mm.dd_hh.nn.ss
    Архивирование
    Формат: 7z
    Сжатие: без сжатия
    Почему без сжатия?
    При резервном копировании SQL базы стоит рассмотреть 2 варианта

    1. Сжатие базы средствами SQL сервера. — Быстрый, но сжимает хуже чем 7z.
    Если выбрали этот вариант, то нужно:
    — Выбрать: без сжатия (т.к. сжимать уже сжатый .bak файл без толку)
    — В свойствах MS SQL сервера включить: Параметры базы данных > Сжимать резервные копии.

    2. Сжатие базы средствами 7z — Медленный, но сжимает лучше чем SQL.
    Если выбрали этот вариант, то нужно:
    — Выбрать: максимальное сжатие
    — В свойствах MS SQL сервера отключить: Параметры базы данных > Сжимать резервные копии.

    В SQL бэкапах я использую первый вариант, хоть он и сжимает по хуже, зато выгрузка делается за считанные минуты (а то и секунды). А вот второй вариант может растянуться на часы.

    В будущих версиях программы разработчики обещали подумать над тем, чтобы добавить опцию сжатия MS SQL баз в свойства задачи Effector Saver, чтобы не бегать в свойства MS SQL сервера.

    Шифровать архивы
    Шифровать имена файлов
    Устанавливаем пароль (запишите его, если забудете, то бэкапы будет не восстановить)
  • Расписание автозапуска:
    Запускать по расписанию: включить
    Ежедневно 03:00
  • Прервать выполнение задачи через: включить
    2 час. 0 мин.


3.2. Задачи > Добавить задачу > Резервное копирование файлов и баз данных (файл)

  • Основные параметры
    Включить в архив файлы
  • Файлы
    Путь к файлам: Выбираем путь к папке в которой лежат файловые базы 1С, например «D:\Bases»
    Если хотим сделать бэкап всех баз в подкаталогах, выбираем:
    Имена сохраняемых файлов, каталогов…:
    1Cv8.1CD
    Включить подкаталоги (рекурсивно)

    Если хотим сделать бэкап выборочных баз в подкаталогах, выбираем:
    Имена сохраняемых файлов, каталогов…:
    Buh\1Cv8.1CD
    Trade\1Cv8.1CD

  • Хранилище архивов
    — Добавляем хранилище \\NAS\Backup\EveryDay
    Автоматически удалять устаревшие резервные копии: 30
    — Добавляем хранилище EveryDay (Google Диск)
    Автоматически удалять устаревшие резервные копии: 30
  • Файл архива
    Имя файла архива: название базы
    Окончание имени архива: yyyy.mm.dd_hh.nn.ss
    Архивирование
    Формат: 7z
    Сжатие: максимальное
    Шифровать архивы
    Шифровать имена файлов
    Устанавливаем пароль (запишите его, если забудете, то бэкапы будет не восстановить)
  • Расписание автозапуска:
    Запускать по расписанию: включить
    Ежедневно 03:00
  • Прервать выполнение задачи через: включить
    2 час. 0 мин.


Основные задачи ежедневного резервного копирования настроили, переходим к дополнительным

4. Задачи > Добавить задачу > Дополнительное копирование

  • Основные параметры
    Задача резервного копирования — источник: выбираем нужную задачу
    Хранилище… источник: выбираем хранилище \\NAS\Backup\EveryDay
  • Хранилище архивов
    — Добавляем хранилище \\NAS\Backup\EveryMonth
    Автоматически удалять устаревшие резервные копии: 24
    — Добавляем хранилище EveryMonth (Google Диск)
    Автоматически удалять устаревшие резервные копии: 24
  • Файл архива
    Имя файла архива: название базы
    Окончание имени архива: yyyy.mm.dd_hh.nn.ss
    Архивирование
    Формат: 7z
    Сжатие: без сжатия
    Шифровать архивы
    Шифровать имена файлов
    Устанавливаем пароль (запишите его, если забудете, то бэкапы будет не восстановить)
  • Расписание автозапуска:
    Запускать по расписанию: включить
    Ежемесячно. Все месяцы 1 числа.
    05:00
  • Прервать выполнение задачи через: включить
    2 час. 0 мин.


По аналогии создаем задачу Дополнительное копирования для ежегодного плана, для быстроты копируем прошлую ежемесячную задачу и меняем в ней название, хранилище и расписание

  • Хранилище архивов
    — Добавляем хранилище \\NAS\Backup\EveryYear
    Автоматически удалять устаревшие резервные копии: 12
    — Добавляем хранилище EveryYear (Google Диск)
    Автоматически удалять устаревшие резервные копии: 12
  • Расписание автозапуска:
    Запускать по расписанию: включить
    Ежемесячно. Февраль 1 числа (год закрыт)
    05:00


Дополнительные задачи резервного копирования настроили, переходим к формированию отчета на почту

5. Задачи > Добавить задачу > Отправка отчетов

  • Основные параметры
    Количество дней…: 1
  • Выбираем все задачи, у всех выбираем фильтр записей: Записи журнала с ошибками
  • Параметры почты
    Заполняем реквизиты почты. Куда и с какой темой отправлять отчеты.
  • Расписание автозапуска:
    Запускать по расписанию: включить
    Ежедневно
    07:00


Осталось запустить все задачи по очереди и проверить на ошибки.

Пример журнала резервного копирования MS SQL базы весом 52Гб (mdf):
===========================================
Задача: Base1
Вид задачи: Резервное копирование файлов и баз данных
Компьютер: SRVTS0
Версия: 4.5 / 2
Запуск: По расписанию, как служба
Начало: 11.11.2019 4:01:08
Конец: 11.11.2019 5:13:57
Статус: Успешное выполнение задачи
===========================================
11.11.2019 4:01:08 - Резервное копирование MSSQL базы "Base1" ...
11.11.2019 4:01:08 - SQL Server version 11
11.11.2019 4:22:15 - Выполнено
11.11.2019 4:22:15 - Резервное копирование файлов ...
11.11.2019 4:22:15 - формат 7z, без сжатия, c шифрованием заголовка
11.11.2019 4:26:50 - 1 файлов добавлено, 0 файлов пропущено
11.11.2019 4:26:50 - Выполнено
11.11.2019 4:26:52 - Загрузка бэкапа 5,41 GB в хранилище "EveryDay (Google Диск)" ...
11.11.2019 4:26:54 - Загрузка "Base1_2019.11.11_04.26.52.7z" 5,41 GB (1 из 1)
11.11.2019 5:13:57 - Загрузка удачно завершена
11.11.2019 4:26:52 - Загрузка бэкапа 5,41 GB в хранилище "\\NAS\Backup\EveryDay" ...
11.11.2019 4:26:52 - Загрузка "Base1_2019.11.11_04.26.52.7z" 5,41 GB (1 из 1)
11.11.2019 4:28:13 - Загрузка удачно завершена

Из журнала видно, что загрузка в хранилище и в облако началась одновременно.
Бэкап в хранилище был завершен через 27 минут. А в облако был выгружен через 1 час 12 минут от старта задачи.
При условии, что параллельно в это же время выполнялось еще 4 задачи резервного копирования баз, размер которых 38Гб, 28Гб, 6Гб и 5Гб (mdf).
Все задачи были одновременно запущены в 4:00 и успешно завершены до 5:15:00.

Выводы:
Есть конечно и небольшие недоработки, кроме тех, что уже описал в статье:
— отсутствие возможности экспорта и импорта настроек и задач в виде текстового файла (именно текстового, а не mdb и т.п., чтобы можно было легко открыть и отредактировать)
— нет визуального сохранения настроек OAuth, всегда пусто и не понятно настроено или нет.
— нет возможности быстро включить/выключать задания (нужно открывать каждое и заходить в расписание). Хотя в главном окне интуитивно так и просится двойной клик по галочке.

Но в целом результат меня очень порадовал. Считаю программу очень полезной.

Напишите о своих алгоритмах бэкапов, которые возможно вас сильно выручали и могут быть полезны другим.

© Habrahabr.ru