Бекап архивов Zenno-проектов в облачное хранилище (Яндекс.Диск, Dropbox, Облако Mail.ru)

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Реакции
3 883
Баллы
113
Сисадмины делятся на 2 типа: тех, кто не делает бэкапы и тех, кто уже делает. © Народная мудрость

У меня уже были такие ситуации, что винда неожиданно ловила BSOD и все списки/таблицы что были в этот момент открыты на запись - превращались в пустоту (заполнялись NUL символами). После таких ситуаций очень неприятно разгребать полученные проблемы и искать где были куплены те или иные аккаунты (в лучшем случае, чаще же самореги уходили в небытие навсегда и без возможности найти эти аккаунты). Поэтому я стал периодически руками создавать архив со всеми проектами и файлами (списками и таблицами), которые лежат по соседству. Так как я отлично понимаю, что рано или поздно от постоянной нагрузки (чтение/запись) - жесткий диск умрет, то я складывал эти архивы в облако (Яндекс.Диск). Но во всей этой ситуации больше всего меня смущало то, что это приходилось делать руками и я часто забывал об этой процедуре.

Изначально, я хотел поставить какую-нибудь программу для бекапа и забыть об этом всём, но погуглив и почитав описания к 100-500МБ монстрам я огорчился и понял, что лучше сделать свое небольшое решение в котором я уверен, чем нагружать систему лишними и слишком неудобными инструментами.

Что именно мне не понравилось в большинстве программ для бекапа:
  1. Данные бекапятся "как есть", без возможности заворачивания в архив.
  2. Много где бекап идет с помощью "diff-ов", а зачем мне это, если всё равно зенно-шаблоны - состоят из нечитаемых бинарных данных?
  3. Бекап запускается точно также руками, нет встроенных планировщиков задач или их демоны слишком тяжелые и нет уверенности, что когда-нибудь они "не отвалятся".
  4. Нет возможности удалять старые архивы (самоочистка).
  5. Бекап только за день, но нет за месяц.
Изначально я подумал, что проще всего написать на C# небольшую программу, которая будет проверять все нужные условия и запускать процесс бекапа, но меня остановила та мысль, что это будет не реюзабельно, т.к. если я выложу готовый .exe файл, то возникнут вопросы - "что внутри?", а если выложу исходник - то большинство не сможет его скомпилировать. Поэтому было решено написать простенький .bat-файл, который запускался бы стандартным windows-шедуллером.

А теперь мы подходим к самому интересному: "чем мы будем собирать всё добро?"

Ответ прост WinRAR (.rar формат). Почему именно он:
  1. Есть возможность добавлять информацию для восстановления.
  2. Есть тестирование архива на ошибки после создания.
  3. Установлен на большинстве windows-машин.
  4. Возможность создания архива на trial-копии и даже на незарегистрированной и истекшей по времени копии.
  5. Есть возможность шифровать архив по паролю.
Поразвлекавшись и покопавшись в крайне уродливом скриптовом языке для создания .bat файлов я всё таки "родил" бекапер на 69 строк с проверкой установлен ли сам WinRAR (без неё: 49 и это ещё не предел).

Данный бекапер у меня работает по схеме: запускаем каждый день ночью, но когда количество архивов превысит 14 штук (2 недели), то удаляем все старые архивы до этой даты (текущий день минус 14 дней). Также, запущен второй вариант: он делает архивы ночью 1го числа каждого месяца, чтобы иметь и старые версии, но хранятся месячные копии только за последние 12 месяцев (старые автоматически удаляются). Все архивы складываются в Яндекс.Диск (вот тут я писал об акции, которую проводит Я.Диск, где можно "на шару" получить +32ГБ, или для особо опытных + неограниченное количество места - бесплатно).


В приложенных файлах архив с 2 бекаперами:
  • zenno_backup_daily.bat — для запуска каждый день;
  • zenno_backup_monthly.bat — для запуска в начале каждого месяца.

Рассмотрим настройки этих мелких скриптов.

Сразу же скажу, что если вы пересохраните их в другой кодировке или будете использовать внутри русскоязычные символы - скорее всего у вас они не заработают. Я поковырялся-поковырялся, чтобы это исправить, но так и не нашел 100% решения этой проблемы, поэтому просто учтите заранее: никаких путей с русскими буквами, менять файлы нужно через Notepad++.

В идеале: нужно настроить всего 2 переменные в обоих .bat файлах. Это:
Код:
Развернуть Свернуть Копировать
set zenno_dir=C:\zenno
- путь к директории с проектами для ZP. Без русских букв и пробелов (с пробелами в пути потребуются кавычки и я не ручаюсь, что с ними всё заработает).


Код:
Развернуть Свернуть Копировать
set backup_dir=C:\YandexDisk\zenno\daily\
- путь к директории, куда складывать ежедневные бекапы (для месячных - нужна другая директория). Также без русских букв, пробелов и со слешем в окончании(!). Данная директория уже должна присутствовать на диске.


Но если у вас WinRAR установлен по какому-то не стандартному пути, то ещё нужно будет изменить путь к rar.exe (именно к нему, а НЕ winrar.exe):
Код:
Развернуть Свернуть Копировать
set rar_path=
- он прописывается в этой переменной. Но вначале попробуйте запустить процесс бекапа без прописывания туда чего-либо, скорее всего у большинства скрипт сам "сдетектит" что нужно запустить.


При создании бекапа также используются определенные функции из самого винрар, они прописаны в переменной rar_argum и вот их описание:
  • -m3 — Метод сжатия (0-без сжатия...3-обычный...5-максимальный)
  • -dh — Открывать совместно используемые файлы (без этого все файлы, что открыты в этот момент – не забекапятся!)
  • -r — Включить в обработку подкаталоги
  • -y — Подразумевать ответ 'Да' на все запросы
  • -rr — Добавить данные для восстановления
  • -t — Протестировать файлы после архивации
  • -mt1 — Количество потоков (во сколько потоков процессора будет идти создание архива. Так как скорее всего у вас будет в это время пахать зенка – не советую повышать количество потоков, чтобы не мешать ей)
  • -ag_yyyy_mm_dd_hh_mm — Добавить к имени архива текущие дату и время (в формате 2017_05_11_12_00 – именно с таким видом в стандартном explorer'e файлы будут идти в правильном порядке)
  • -inul — Не показывать никаких сообщений (если удалите вот этот аргумент, то сможете разобраться почему архив не создается, но по факту когда уже всё работает – не зачем выводить все данные процесса создания архива в консоль)

Удаление старых архивов происходит с помощью утилиты forfiles.exe - в windows server 2012R2 она у меня уже была, но возможно, что у вас её нет. В этом случае советую попробовать поставить Windows Server 2003 Resource Kit Tools, хоть там её и нет в списке, но все источники дают ссылку именно туда. Если кто-то найдет где взять только эту утилиту без кучи хлама, чтобы она запускалась под всеми системами - то с удовольствием поменяю тут ссылку.

Естественно, первоначально стоит попробовать создать бекап руками (запустив оба этих .bat файла) и проверив, что бекапы создаются и "всё окей".

И на последок: осталась самая интересная часть - "как это добро запускать автоматически?"

Так как у меня стоит windows server 2012R2, то я покажу на его примере. В принципе, скорее всего в других версиях винды - это будет аналогично.

  1. Стандартный планировщик заданий для Windows находится в: Панель управления -> Администрирование -> Планировщик заданий (или можно запустить по пути: C:\Windows\system32\taskschd.msc )
  2. Далее справа выбираем "Создать задачу":
    yU0UKDY.png
  3. Прописываем имя:
    JaICYCX.png

  4. Добавляем триггер запуска:
    qQ3YGuE.png
    1. Пример для ежедневного запуска:
      BjRTQAC.png
    2. Пример для ежемесячного запуска (предварительно нужно создать второе задание!!!), но указываем другое время, чтобы не запускать одновременно 2 процесса архивирования
      0Tiz93I.png
  5. Добавляем действие
    x7s7X7V.png

    Для ежемесячного запуска путь будет другой, не забудьте.
    51s8Nhh.png

  6. Добавляем условия:
    jkLDwr3.png

  7. Добавляем параметры:
    chdhF2C.png

  8. Сохраняем задачу :-)

Всё, теперь можно жить спокойно:
51m0zbx.png


Немного ответов на вопросы, которые могут сразу же задать:
  1. "Почему стоит складывать бекапы в облачное хранилище?" - потому что в случае выхода из строя вашего жесткого диска - они там хотя бы останутся.
  2. "Почему запуск через планировщик виндовс, а не через зенку?" - потому что мне идеологически не нравится идея запускать бекап через программу, данные которой и бекапим. Ну и всё таки виндовый планировщик то надежнее.
  3. "Как восстанавливать данные?" - просто распаковать архив обратно, но естественно проверив всё руками. К сожалению, тут не предусмотрено как проверять измененные файлы и восстанавливать только то, что "ушло в небытие", но это гораздо усложнит данную заметку и вообще выйдет за рамки статьи.
  4. "Как быть в случае того, если в то место на жестком диске, куда запишется архив - попадут нулевые биты и архив будет испорчен?" - если повезет, то поможет информация для восстановления, которую мы добавляем во время создания архива. Если нет, то это будет грустно, но подумайте - каков шанс получить именно такой косяк? Скорее уж просто жесткий диск целиком умрет.

И в виде домашнего задания:
  1. Подумайте самостоятельно как можно бекапить купленные проекты (ботов) и данные к ним, что они создают/используют.
  2. Подумайте и решите как делать резервные копии БД (mysql, postgresql, mssql), если вы используете их.

Не претендую на звание "первооткрывателя" или какие-либо лавры, но надеюсь, что данная статья поможет вам сэкономить кучу нервов в случае отказа оборудования. Поэтому советую вам прямо сейчас задуматься о том, что стоит делать бекапы, даже если у вас никогда не возникало проблем :-)


А как вы бекапитесь?


PS: данная статья опубликована специально во время конкурса, но не в рамках/разделе конкурса, т.к. идея пришла спонтанно, да и что-то активность в конкурсном разделе "нулевая", поэтому я посчитал, что стоит так приободрить тех, кто заявился и будет публиковаться ;-)


UPD:
1. Бекап MySQL баз данных
: https://zennolab.com/discussion/threads/37357/#post-286012 и его обновленнная версия: https://zennolab.com/discussion/threads/37357/post-339621
2. Бэкап настроек ZennoPoster (плагины, настройки и тд): https://zennolab.com/discussion/threads/37357/post-419737
 
Категория
  1. Полезно

Вложения

Последнее редактирование:
Спасибо, отличный вариант, я привязывал папку с проектами к облаку, но это не очень удобно, постоянно шуршит синхронизация и иногда сыплются excel_таблицы, а из архива с датой вытащить не проблема)
 
p.s. многие пишут, что мол не стоит доверять и бекапить файлы приватные, а я ставлю очень длиннный и сложный пасс на архив и бекаплю.)
 
Последнее редактирование:
Вот почему так всегда?
Нормальные темы внеконкурса, а всякий публичный, рекламный шлак в конкурсе.

За тему жирный плюс
 
У меня все гораздо проще, есть папка гугл драйва и все файлы шаблонов находятся там как одновременно на всех дедиках, да идет синхронизация, но если требуется файлы с разных мест обрабатывать выношу просто данный шаблон в необновляемую папку.
 
Я использую BackUp32 , бесплатная, портабл. сделана в 2001 году, и до сих пор работает на win7.
 
Последнее редактирование:
Я юзаю два бэкапщика + облако в mega.nz. Все кучеряво. Главное когда бэкапишь, все стабильно. А когда не бэкапишь, все улетает вникуда. Закон подлости
 
  • Спасибо
Реакции: GreenWay
Подумайте и решите как делать резервные копии БД (mysql, postgresql, mssql), если вы используете их.

Кто-нибудь домашнее задание выполнил? Просто хотелось как раз в пару шаблонов по обновлению остатков в интернет-магазинах напрямую через БД добавить бэкап базы, но пока так и не понял, как это реализовать (без захода в phpMyAdmin, конечно).
Может, есть какие-то прямые sql-запросы, которые создавали бы бэкап и возвращали файл? ))
 
Может, есть какие-то прямые sql-запросы, которые создавали бы бэкап и возвращали файл? ))
На *nix системах в пакете mysql-server есть утилита командной строки mysqldump, которая делает дамп выбранной БД в файл. Скорее всего и для win системы есть такая, но точно не скажу, т.к. не пользовался.
 
Т.к. никто не сделал "домашнее задание", то я выложу свое решение, основанное на вышеприведенном бекапе в rar.

Бекап всех баз данных из MySQL в RAR архивы (в архивах будут *.sql для каждой базы).

Для настройки:
  1. Нужно прописать свои настройки подключения к MySQL в файле mysql_config.cnf
  2. В файле бекапа mysql_backup_daily.bat поменять:
    • backup_dir - путь к папке, куда будут бекапится архивы (со слешем на конце!)
    • mysql_path - путь к mysql.exe
    • mysqldump_path - путь к mysqldump.exe
  3. Прописать задачу в планировщике, как написано в первом посте.
 

Вложения

Блииин, на ночь оставил пару шабов на post-get запросах выполняться - утром ноут шуршал, но экран не светился. После перезагрузки - вроде как битые сектора на жестком - система не запускается. Нашел карман - карман видел системный, медийный, а вот диск с Zenno не видел - а там все шабики, и заготовки и прочее по мелочи. Подождал еще пару часов - раздуплился карман и обнаружил таки диск с zenno. Все удалось вытащить.
Так что СПАСИБО ТС за решение, наставил облаков и настроил копирование, при этом удалив все лишнее (было много недопощенных файликов и прочего мусора)
Так что...
TuQ5iHE.jpeg
 
Блииин, на ночь оставил пару шабов на post-get запросах выполняться - утром ноут шуршал, но экран не светился. После перезагрузки - вроде как битые сектора на жестком - система не запускается. Нашел карман - карман видел системный, медийный, а вот диск с Zenno не видел - а там все шабики, и заготовки и прочее по мелочи. Подождал еще пару часов - раздуплился карман и обнаружил таки диск с zenno. Все удалось вытащить.
Так что СПАСИБО ТС за решение, наставил облаков и настроил копирование, при этом удалив все лишнее (было много недопощенных файликов и прочего мусора)
Так что...
У меня у самого недавно жесткий диск в iMac умер, да так, что оттуда инфу на 99% нереально вытащить.
Хорошо, что всё важное в облаках было, да забекаплено везде..
 
Конечно красиво написано, но лучше делать это Acronis, можно создавать инкрементные и фулл бекапы.
 
чем Яндекс диск лучше флешка
Вон пример с запретом Яндекс.... Все может случится, а 2 раза в неделю воткнуть флешку и все ок.
 
  • Спасибо
Реакции: Nick
только диверсификация своих копии, поможет спасти файлы.
Если хранить в 2-3 местах одновременно вероятность что все три места хранения одновременно испортятся, мало вероятна
 
Чуть обновил бекапилку баз данных mysql: теперь временные файлы (не заархивированные sql дампы) не будут сохраняться в под-директории яндекс.диска / дропбокса / гугл драйва.
А то я заметил, что у меня место на яндекс.диске, куда бекаплюсь как-то очень быстро убегает: оказывается, что при создании этих временных дампов перед архивацией они тоже успевают улететь в облако и потом сразу же оттуда удаляются, попадая в "корзину" на яндекс диске, а это занимает место. Сделал чтоб они сохранялись в папке на диске C:

Скачать обновленную версию можно отсюда: https://gist.github.com/lord-alfred/49f53c06eb94d9cc41a29f52fd18197d
 
  • Спасибо
Реакции: phoenixs
Очень удобно, спасибо. Как раз искал решение, менее громоздкое, чем работа с программами, типа acronis.
 
очень полезно, спасибо!

Dropbox также очень полезен для резервного копирования. Часто мои xlsx и txt файлы также полностью стираются. Или иногда случайно перезаписываю файл.

Я запускаю все свои проекты в Dropbox, поэтому он автоматически сохраняет сотни резервных копий версий для каждого файла.
 
Во время бежит! Почти 2 года прошло, как я юзаю этот способ бекапа zenno-проектов и mysql-баз данных в яндекс диск :-)
А сегодня я выложу скрипт для такого же бекапа настроек ZennoPoster, т.к. недавно заметил ещё одну тему о потере этих данных. К сожалению, это уже не первая такая проблема у пользователей, поэтому было решено напилить универсальный скрипт для себя и выложить его для всех.

Скрипт делает резервную копию (в архиве) следующих директорий:
  • %AppData%\ZennoLab - настройки ZP, где лежат все сниппеты, задания и прочее за исключением:
    • %AppData%\ZennoLab\ZennoPoster\5\ProjectMaker\Browser - профили браузера для PM, они там лежат если открыт PM с использованием браузера. Незачем ими место забивать в архиве
    • %AppData%\ZennoLab\ZennoPoster\5\Data - какие-то базы GeoIP, прокси и прочая мишура, которая занимает место. Не проверял, но скорее всего с инсталлом новой зенки - эти файлы должны сами там появиться, поэтому нет смысла бекапить их
  • %ZennoPosterCurrentPath%\ExternalAssemblies - бекап dll библиотек, используемых в проектах
  • %UserProfile%\..\%username%\Documents\ZennoLab - бекап локальных плагинов (появились в недавней версии зенки)
  • %UserProfile%\Documents\ZennoLab - бекап купленных продуктов (скорее всего должны сами восстановиться, но не помешает ведь?) + вроде бы бекап настроек (делается по кнопке из настроек)
Да, сразу же отвечу, что плагины и купленные продукты сейчас лежат в разных директориях. Это скорее всего бага, я уже о ней репортил. Поэтому пути для бекапа отличаются таким образом (у меня точно, поэтому там такой небольшой изврат с бекапом плагинов).

И да, если у вас в настройках сменены пути к этим директориям, то и в скрипте их нужно поменять!

Настраивать (включать по расписанию) скрипт бекапа нужно точно также - как описано в первом посте, абсолютно ничего нового нету. Удаляет старые бекапы, старше 7 дней (с помощью forfiles), бекапит в яндекс диск.

PS: если вдруг я забыл какую-то директорию, которую также нужно бекапить - напишите, пожалуйста.
PPS: проверьте после тестового запуска бекапа - всё ли корректно забекапилось, особенно плагины, если используете их!
 

Вложения

Последнее редактирование:
Если нужно сделать бэк из нескольких директорий в один архив,то:
  1. Создайте в папке с батником файл backup.lst
  2. Пропишите в батнике название файла в таком виде @backup.lst вместо пути к папке с бекапом
  3. В файле backup.lst с новой строки пропишите путь к директориям которые нужно забекапить
43977
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)