Скрипт бекапа на Яндекс. Автоматичне резервне копіювання на Яндекс.Диск

У попередніх двох статтях я налаштовував LAMP на VPSі прикручував до нього nginx. Наступне, про що одразу починаєш думати, як би все це не втратити. Тобто йдеться про резервне копіювання.

Обговоримо по порядку: що, куди і як бекапити.

Що

  1. Всі конфіги, які ви ретельно редагували ( / etc)
  2. Всі файли користувача ( /home, /root)
  3. Бази даних (будемо на увазі MySQL)

Куди

Нині все йде у «хмари». Резервні копії хочеться складати туди.

Дуже цікавим варіантом для зберігання бекапу виявився Яндекс.Діск. У нього є кілька переваг:

  • Безкоштовні 10 Гб
  • Він знаходиться в Росії, і файли дуже швидко на нього заливаються
  • Вміє працювати за протоколом WebDAV, що дозволяє завантажувати дані з консолі за допомогою команди curl

Як

Ось рецепт. Логіном root-ом і створюємо скрипт:

Chmod 0700 backup-now.sh

Текст скрипта буде приблизно таким:

#!/bin/bash SERVER_NAME="server1" TIME=`date +%Y-%b` FS_FILE=/tmp/$SERVER_NAME-fs.$TIME.tar.gz MYSQL_FILE=/tmp/$SERVER_NAME-mysql.$TIME .sql.gz # Archiving filesystem tar -czf $FS_FILE /etc /root /home # Archiving databases mysqldump -u root --password=qwerty --all-databases | gzip > $MYSQL_FILE # Uploading to cloud curl --user USER:PASSWORD -T "($FS_FILE,$MYSQL_FILE)" https://webdav.yandex.ru/ # Cleanup unlink $FS_FILE unlink $MYSQL_FILE

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

Тепер для автоматизації треба додати симлінк на backup-now.sh у /etc/cron.daily (або /etc/cron.weekly). Тільки майте на увазі, що на деяких системах (зокрема, на Debian) у симлінку треба прибрати розширення ().

Змінна $TIME підібрана так, що у вас будуть накопичуватись бекапи від останнього числа кожного місяця. Якщо не хочете захламляти хмару, це можна прибрати зі скрипту, проте практика показує, що старі копії можуть виявитися корисними. Просто треба буде періодично видаляти старе.

А якщо не хочу Яндекс.Диск?

Очевидно, можна заливати на будь-який ресурс, що підтримує WebDAV. Існують сервіси, що відкривають доступ по WebDAV до Dropbox або Google Drive (наприклад, Otixo, SMEStorage, DropDAV). Ходять чутки, що SkyDrive працює через WebDAV. А також є надія, що підтримка з'явиться у Дропбоксі із коробки.

P.S. Шифрування архівів за допомогою GnuPG

Оскільки бекапи містять купу секретної інформації (паролі, дані), то є сенс їх шифрувати:

GPG_COMMAND="gpg -c -z 0 --batch --passphrase XXXXXXXXXX" FS_FILE=/tmp/$SERVER_NAME-fs.$TIME.tar.gz.gpg MYSQL_FILE=/tmp/$SERVER_NAME-mysql.$TIME.sql. gz.gpg # Archiving filesystem tar-cz/etc/root/home | $GPG_COMMAND > $FS_FILE # Archiving databases mysqldump -u root --password=qwerty --all-databases | gzip | $GPG_COMMAND > $MYSQL_FILE . . .

Про резервне копіювання на зовнішні носіїу Windows 7 або 8.1 написано чимало. Але як бути, якщо ви використовуєте кілька пристроїв (наприклад, комп'ютер, планшет, телефон під керуванням Windows)? І вам терміново потрібні дані, скажімо, документи, що зберігаються на комп'ютері чи іншому пристрої? На такий випадок найкраще створити резервну копіюу «хмарі». До речі, туди я рекомендував би помістити і ваші архіви. Наприклад, архіви тих самих документів. До речі, це дуже корисно і в тому випадку, якщо ви використовуєте у своєму ноутбуку твердотільний диск SSD замість звичайного жорсткого диска. У цій статті ми розглянемо основні "хмарні" сховища - OneDrive від компанії Microsoft, Google Диск, Dropbox та Яндекс Диск.

Використання OneDrive дуже вигідно, якщо ви працюєте з Windows 8.1. У такому випадку об'єм сховища може становити 15 Гбайт, а якщо ви ще й щасливий власник підписки Office 365, то об'єм сховища OneDrive зовсім не обмежений. Нові користувачі Google Drive починають із 15 Гбайт. Dropbox спочатку надає лише 2 Гб вільного простору, але більшість користувачів швидко збільшує цей обсяг до 5 Гб і більше. Вартість передплати на 1 Tбайт становить 10 дол. на місяць або 100 дол. щорічно.

Всі служби дозволяють вказати, які файли та папки ви хочете синхронізувати з "хмарою". Це означає, що ви можете залишити деякі файли та папки тільки у своєму «хмарному» диску та завантажувати їх за необхідності. Давайте докладно розберемо, як це робиться.

Для початку роботи з Dropbox вам необхідно зайти на сайт www.dropbox.com, зареєструватися та вибрати відповідний тарифний пландля індивідуального використання (див. екран 1). Після цього вам буде запропоновано завантажити відповідний пакет установки (див. екран 2).

Екран 1. Dropbox
Екран 2. Реєстрація в?Dropbox

Хотілося б відразу відзначити, що при реєстрації в Dropbox вас просять вказати пароль лише один раз, відповідно необхідно бути уважнішими.

Вибіркова синхронізація під час використання систем Windows 7, 8 або 8.1 виглядає так. Для створення правил вибіркової синхронізації клацніть правою клавішеюмиші по значку Dropbox на панелі завдань – відкриється вікно налаштувань (див. екран 3).



Екран 3. Налаштування облікового запису

Фактично, вибіркова синхронізація дозволяє вказати, які папки потрібно синхронізувати з Dropbox. Це, безумовно, зручно, якщо у вас в руках нетбук або комп'ютер з невеликим. жорстким диском(і немає із собою зовнішнього). Зверніть увагу, що папки для вибіркової синхронізації повинні знаходитися всередині папки Dropbox. Таким чином, для вибіркової синхронізації необхідно скопіювати файли, які ви хочете перенести (скопіювати) до «хмарного» сховища Dropbox у відповідну папку на диску.

Якщо ви скасуєте синхронізацію спільної папки через меню «Вибіркова синхронізація» у вікні налаштувань, вона перестане синхронізуватися лише з комп'ютером. При цьому сама папка залишиться в Dropbox і синхронізуватиметься з обліковими записами інших користувачів. Щоб перестати користуватися спільною папкою, можна або залишити її на сайті Dropbox, або (якщо ви її створили) скасувати загальний доступдо неї.

Для того, щоб завантажити Google Disk, вам необхідно скористатися своєю обліковим записомдо служб Google, а потім виберіть службу Google Disk (див. екран 4).

Можна настроїти наступні установки.

Акаунт

  • Вимкнути обліковий запис. Синхронізуйте папку Google Дисказ іншим акаунтом Google(не рекомендується).
  • Розширити простір для зберігання даних. Придбайте додатковий простір.

Параметри синхронізації

  • Синхронізуйте лише деякі папки з цим комп'ютером. Встановіть прапорці поруч із папками розділу «Мій диск», щоб увімкнути синхронізацію. Зніміть прапорці поруч із папками, які не потрібно синхронізувати.
  • Синхронізувати об'єкти, до яких я маю доступ. Якщо ви працюєте в новому інтерфейсі Диску, перемістіть файли та папки з розділу «Доступні» до папки «Мій диск», щоб синхронізувати їх з комп'ютером. Якщо ви користуєтеся класичною версією диска, додайте папки та файли з розділу «Доступні мені» до папки «Мій диск».

Розширені

  • Запускати Google Диск автоматично, коли комп'ютер увімкнено. Диск Google запускатиметься та синхронізуватиме папку на комп'ютері з розділом «Мій диск».
  • Надсилати звіти про збої та статистику використання Google. Надсилайте інформацію до Google, щоб можна було покращити роботу сервісу.
  • Проксі-сервер. Доступні дві функції: "Пряме підключення" та "Автоматично визначати налаштування проксі-сервера".
  • Інші. Відображення піктограм статусу синхронізації файлів.

Вибір файлів та папок для синхронізації з комп'ютером. Усі документи, таблиці, презентації, форми, малюнки та зведені таблиці Google синхронізуються з папкою Google Диска на комп'ютері. Щоб вимкнути синхронізацію, виконайте такі дії:

1. Натисніть піктограму Google Диск.

  • На комп'ютерах Macйого зазвичай можна знайти на панелі "Меню" у правій верхній частині екрана.

2. Виберіть "Параметри".

3. Зніміть прапорець «Синхронізувати деякі папки з цим комп'ютером».

4. Натисніть кнопку «Застосувати зміни».

Розділ "Мій диск" (усі файли або окремі папки). Усі файли та папки з розділу "Мій диск" синхронізуються з папкою Google Диска на вашому комп'ютері. Щоб настроїти синхронізацію окремих папок, виконайте такі дії:

1. Перемістіть файли до папок, які ви плануєте синхронізувати.

2. Натисніть піктограму Google Диск на робочому столі.

  • На комп'ютерах Mac його можна знайти на панелі «Меню» у верхній частині екрана.
  • На комп'ютерах Windowsзначок знаходиться на панелі завдань у нижньому правому куті екрана.

3. Виберіть «Параметри».

4. Встановіть прапорець «Синхронізувати лише деякі папки з цим комп'ютером».

5. Виберіть папки, які потрібно синхронізувати з папкою Google Диск.

6. Натисніть кнопку «Застосувати зміни».

Робота з OneDrive

Якщо ви використовуєте операційну систему Windows 8.1, то сховище One Drive надається вам за замовчуванням. OneDrive - безкоштовне інтернет-сховище, що надається разом з обліковою записом Microsoft. Почати використання OneDrive легко. Ви можете додати до OneDrive файли, збережені на комп'ютері, скопіювавши або перемістивши їх. Ви можете зберігати нові файли в OneDrive, щоб використовувати їх з будь-якого пристрою та ділитися ними з іншими. Якщо у вашому комп'ютері є вбудована камера, ви можете автоматично зберігати копії фотографій у OneDrive, щоб завжди мати резервну копію. На відміну від попередніх сховищ, ви можете зберігати файли безпосередньо в One Drive, не зберігаючи їх на комп'ютері.

Функції класичної програми вбудовані у Windows

OneDrive синхронізує файли під час реєстрації в системі з обліковим записом Microsoft. Якщо класична програма інсталюється на комп'ютері під керуванням Windows 8.1, програма інсталяції не з'являється. Буде встановлено компонент, який дозволить використовувати Office для роботи з документами OneDrive одночасно з іншими користувачами, але інші компоненти не будуть встановлені. Якщо ви працюєте під керуванням Windows 7 або 8, то зможете завантажити класичну програму для керування OneDrive за адресою onedrive.live.com/about/en-us/download/.

Для користувачів Windows 8.1 достатньо зробити таке (див. екран 6):

  1. Відкрийте програму OneDrive у Windows Explorer.
  2. Клацніть правою клавішею по файлу (папці) та виберіть «Зробити доступним автономно» або «Зробити доступним лише через Інтернет».

Як показано на екрані 8, для синхронізації Яндекс Диска достатньо скопіювати відповідні файли до папки Яндекс.Диск. На перший погляд, такий підхід до синхронізації найбільше нагадує Google Disk. Частково це правильно.

Використовуючи веб-додаток Яндекс.Диск, ви зможете завантажити відповідний додаток для Windows. Для вибіркової синхронізації необхідно увійти до панелі налаштувань Яндекс Диска та вибрати вкладку «Синхронізація». Якщо ви знімете галочку з відповідної папки, вона синхронізуватись не буде. Щоб завантажити файли в папку, синхронізацію якої вимкнено, достатньо просто перетягнути файли до неї у Провіднику. Таким чином, у цьому випадку вміст кореневої папки Яндекс Диска синхронізується завжди, а вміст підпапок може бути синхронізований на ваш вибір.

Основна відмінність Яндекс Диска від Dropbox і Google Disk полягає в тому, що зберігати файли в Яндекс.Діск можна безпосередньо з Microsoft Office.

Таким чином, використовуючи «хмарні» сховища, ви можете не лише збільшити вільне місцена своєму жорсткому диску, але й забезпечити резервну копію найважливіших ваших файлів (документи, фото тощо). Якщо ж порівнювати зручність використання вибіркової синхронізації, висновок напрошується однозначний. І Dropbox, і Google Disk вибір налаштовується на рівні папки. Таким чином, потрібно зайти в діалог «Налаштування» відповідної служби та вручну вказати, які папки синхронізуються, а які ні. Рішення ж, що підтримує контекстне менюу Провіднику, що дозволяє налаштувати синхронізацію та розміщення файлів, існує на сьогодні тільки у Microsoft.

Не буду описувати всіх принад, що надаються Яндекс.Диском, всі їх знають... І одна з них - можливість організації резервного копіювання VPS на Диск Яндекса. Сервер у мене працює на Debian, ось його ми й розглянемо. Як водиться, щоб не забути!
Власне бекап я налаштував уже більше року тому, але недавно щось ламалося і мені знову довелося збирати по крихтах інфу про налаштування оного. Статей і відомостей корисних багато, але так щоб "все і відразу", каюся, не знайшов. Тому й пишу, акумулюю все в одному місці, так би мовити собі, а може і ще комусь пригодиться. Про причини поломки нижче, я її вирахував, але зараз про налаштування-установки...
1. Копіювання файлів на Я.Диск відбуватиметься за протоколом WebDAV і перше, що нам треба зробити на нашому сервері – встановити утиліту davfs2
# apt-get install davfs2
2. Створюємо точку монтування, а простіше сказати папку на нашому сервері, куди "звалюватимуться" наші бекапи, в моєму випадку це: mnt/yandex.disk
# mkdir /mnt/yandex.disk
3. Щоб кожен раз не вводити руками логін і пароль від Вашого диска, збережемо їх у файлі конфігурації davfs2. Він тут: /etc/davfs2/secrets, зберігаємо так:
# echo "https://webdav.yandex.ru ВАШ_ЯНДЕКС_ЛОГІН ВАШ_ЯНДЕКС_ПАРОЛЬ" >> /etc/davfs2/secrets
4. Монтуємо диск:
# mount -t davfs https://webdav.yandex.ru/mnt/yandex.disk/
5. Перевіряємо все у нас добре:
# df -h /mnt/yandex.disk/
Якщо все зрослося, то ми повинні побачити щось приблизно таке:
Filesystem Size Used Avail Use% Mounted on
https://webdav.yandex.ru
10G 1G 10G 10% /mnt/yandex.disk
6. Щоб після перезавантаження сервера нам знову ручками все не монтувати, пишемо в файл /etc/rc.local:
sleep 120 && mount -t davfs https://webdav.yandex.ru /mnt/yandex.disk
Пишемо вище рядка з exit 0. Число 120 - це затримка виконання в секундах. У принципі значення можна встановити як менше, так і більше ... У мене ось двох-хвилинна затримка перед монтуванням, щоб все вже точно завантажилося.
Після монтування папка /mnt/yandex.disk буде синхронізуватися з Яндекс.Диском і нам залишиться налаштувати бекапи на сервері, а саме, щоб вони зберігалися в папку /mnt/yandex.disk... Але це вже тема для іншої статті. ..) З цим все!..

Аж ні, не все...

Пам'ятаєте на початку статті я згадав про «щось поламалося»... А зламалася, як з'ясувалося FUSE. Чи то при оновленні ядра, чи то ще чомусь, але поламалася. У результаті при монтуванні я отримував "/sbin/mount.davfs: no free coda device to mount" і бла-бла-бла ще пару рядків так само. FUSE у мене була присутня, але не запускалася. Запустив:
# modprobe fuse
Однак після перезавантаження VPS її знову доводилося запускати вручну. Можна звичайно перезбирати ядро ​​або зробити простіше, додавши в кінець файлу /etc/initramfs-tools/modules: fuse
Або ще простіше:
# echo "fuse" >> /etc/modules
Цей рецепт із Хабра у мене заробив.
Тепер все. У тому сенсі, що все OK!

Ми часто не замислюємося про збереження файлів, поки не буває якийсь форс-мажор. Наприклад, забутий у кафе або випадково залитий кавою ноутбук. Існує безліч способів убезпечити дані від випадкової втрати, але розібратися в них може лише фахівець.

Нова безкоштовна версія Handy Backup Яндекс.Диском

Допомоги API Диска , напишіть нам

Нова безкоштовна версія Handy Backup для Windows, інтегрована з Яндекс.Диском, зробить усю роботу за вас. За допомогою цієї утиліти легко налаштувати резервне копіюванняважливих даних на ваш Диск і більше не турбуватися про їхню безпеку. Файли у хмарі доступні вам з будь-якого пристрою, і ви завжди зможете відновити їх у разі поломки або втрати ноутбука.

До речі, посилання на інтегровані з Диском програми ви завжди зможете знайти в нашій Допомозі. Якщо вам відомі інші програми, що використовують диски API , напишіть нам . Ми перевіримо їх та оновимо список.
","contentType":"text/html"),"proposedBody":("source":"Ми часто не замислюємося про збереження файлів, поки не трапляється якийсь форс-мажор. Наприклад, забута в кафе або випадково залита кава Існує безліч способів убезпечити дані від випадкової втрати, але розібратися в них часом може тільки фахівець.

Нова безкоштовна версія Handy Backup для Windows, інтегрована з Яндекс.Диском, зробить усю роботу за вас. За допомогою цієї утиліти легко налаштувати резервне копіювання важливих даних на ваш Диск і більше не турбуватися про їхню безпеку. Файли у хмарі доступні вам з будь-якого пристрою, і ви завжди зможете відновити їх у разі поломки або втрати ноутбука.

До речі, посилання на інтегровані з Диском програми ви завжди зможете знайти в нашій Допомозі. Якщо вам відомі інші програми, що використовують диски API , напишіть нам . Ми перевіримо їх та оновимо список.
","html":"Ми часто не замислюємося про збереження файлів, поки не трапляється якийсь форс-мажор. Наприклад, забутий у кафе або випадково залитий кавою ноутбук. Існує безліч способів убезпечити дані від випадкової втрати, але розібратися в них може лише фахівець.

Нова безкоштовна версія Handy Backup для Windows, інтегрована з Яндекс.Диском, зробить усю роботу за вас. За допомогою цієї утиліти легко налаштувати резервне копіювання важливих даних на ваш Диск і більше не турбуватися про їхню безпеку. Файли у хмарі доступні вам з будь-якого пристрою, і ви завжди зможете відновити їх у разі поломки або втрати ноутбука.

До речі, посилання на інтегровані з Диском програми ви завжди зможете знайти в нашій Допомозі. Якщо вам відомі інші програми, що використовують диски API , напишіть нам . Ми перевіримо їх та оновимо список.
","contentType":"text/html"),"authorId":"185828634","slug":"841","canEdit":false,"canComment":false,"isBanned":false,"canPublish" :false,"viewType":"old","isDraft":false,"isOnModeration":false,"isSubscriber":false,"commentsCount":28,"modificationDate":"Tue Jun 18 2013 12:01:54 GMT +0000 (UTC)","approvedPreview":("source":"Ми часто не замислюємося про збереження файлів, поки не трапляється якийсь форс-мажор. Наприклад, забутий у кафе або випадково залитий кави ноутбук. Існує безліч способів убезпечити дані від випадкової втрати, але розібратися в них може лише фахівець.

Нова безкоштовна версія Handy Backup для Windows, інтегрована з Яндекс.Диском, зробить усю роботу за вас. За допомогою цієї утиліти легко налаштувати резервне копіювання важливих даних на ваш Диск і більше не турбуватися про їхню безпеку. Файли у хмарі доступні вам з будь-якого пристрою, і ви завжди зможете відновити їх у разі поломки або втрати ноутбука.

До речі, посилання на інтегровані з Диском програми ви завжди зможете знайти в нашій Допомозі. Якщо вам відомі інші програми, що використовують диски API , напишіть нам . Ми перевіримо їх та оновимо список.
","html":"Ми часто не замислюємося про збереження файлів, поки не трапляється якийсь форс-мажор. Наприклад, забутий у кафе або випадково залитий кавою ноутбук. Існує безліч способів убезпечити дані від випадкової втрати, але розібратися в них часом може тільки спеціаліст.","contentType":"text/html"),"proposedPreview":("source":"Ми часто не замислюємося про збереження файлів, поки Існує безліч способів убезпечити дані від випадкової втрати, але розібратися в них іноді може тільки фахівець.

Нова безкоштовна версія Handy Backup для Windows, інтегрована з Яндекс.Диском, зробить усю роботу за вас. За допомогою цієї утиліти легко налаштувати резервне копіювання важливих даних на ваш Диск і більше не турбуватися про їхню безпеку. Файли у хмарі доступні вам з будь-якого пристрою, і ви завжди зможете відновити їх у разі поломки або втрати ноутбука.

До речі, посилання на інтегровані з Диском програми ви завжди зможете знайти в нашій Допомозі. Якщо вам відомі інші програми, що використовують диски API , напишіть нам . Ми перевіримо їх та оновимо список.
","html":"Ми часто не замислюємося про збереження файлів, поки не трапляється якийсь форс-мажор. Наприклад, забутий у кафе або випадково залитий кавою ноутбук. Існує безліч способів убезпечити дані від випадкової втрати, але розібратися в них часом може тільки спеціаліст.","contentType":"text/html"),"titleImage":null,"tags":[("displayName":"Windows" ,"slug":"windows","categoryId":"150632282","url":"/blog/disk??tag=windows"),("displayName":"бекап","slug":"bekap" ,"categoryId":"151512312","url":"/blog/disk??tag=bekap"),("displayName":"Програми та програми","slug":"programmy-i-prilozheniya"," categoryId":"150632343","url":"/blog/disk??tag=programmy-i-prilozheniya"),("displayName":"Новини","slug":"novosti","categoryId":" 150632287","url":"/blog/disk??tag=novosti")],"isModerator":false,"url":"/blog/disk/841","urlTemplate":"/blog/disk/ %slug%","fullBlogUrl":"https://yandex.ru/blog/disk","addCommentUrl":"/blog/createComment/disk/841","updateCommentUrl":"/blog/updateComment/disk/ 841","addCommentWithCaptcha":"/blog/createWithCaptcha/disk/841","changeCaptchaUrl":"/blog/api/captcha/new","putImageUrl":"/blog/image/put","urlBlog": "/blog/disk","url EditPost":"/blog/56a9e81cdcd7051109596aee/edit","urlSlug":"/blog/post/generateSlug","urlPublishPost":"/blog/56a9e81cdcd7051109596aee/publish","urlUnpublishPost":"/blog/56a9e81cdcd7051109596aee/unpublish" ,"urlRemovePost":"/blog/56a9e81cdcd7051109596aee/removePost","urlDraft":"/blog/disk/841/draft","urlDraftTemplate":"/blog/disk/%slug%d "/blog/56a9e81cdcd7051109596aee/removeDraft","urlTagSuggest":"/blog/api/suggest/disk","urlAfterDelete":"/blog/disk","isAuthor":false,"sub /subscribe/56a9e81cdcd7051109596aee","unsubscribeUrl":"/blog/api/unsubscribe/56a9e81cdcd7051109596aee","urlEditPostPage":"/blog/disk/56a9e81cdcd7051109596aee/edit","urlForTranslate":"/blog/post/translate"," urlLoadTranslate":"/blog/post/loadTranslate","urlTranslationStatus":"/blog/disk/841/translationStatus","urlRelatedArticles":"/blog/api/relatedArticles/disk/841","ampUrl":"https ://blog.yandex.net/amp/uk/disk/841","author":("id":"185828634","uid":("value":"185828634","lite":fal se,"hosted":false),"aliases":(),"login":"disk-blog","display_name":("name":"disk-blog","avatar":("default": "20706/185828634-18294593","empty":false)),"address":" [email protected]","imageSrc":"https://yapic.yandex.ru/get/185828634/islands-middle","isYandexStaff":false),"originalModificationDate":"2013-06-18T08:01:54.000Z", "socialImage":("orig":("fullPath":"https://avatars.mds.yandex.net/get-yablogs/47421/file_1453996106397/orig")))))">

Викладати бекапи проектів (сайтів) на Яндекс.Диск може знадобитися з кількох причин, наприклад, через брак місця на сервері (хостингу, VDS, VPS) або підвищення безпеки зберігання бекапів (на випадок, якщо сервер без рейду і він вийде з ладу).

У зв'язку з цим я написав для себе і вирішив викласти для інших невеликий bash-скрипт для бекапа на Яндекс.Діск. Функції скрипта:
- Створення на сервері бекапа проектів (файлів + баз даних MySQL);
— Авторизація на Яндекс.Диску як додаток (за токеном, більше безпечний спосіб, Чим використання логіну та паролю);
- Відправлення бекапів із сервера на Яндекс.Діск;
- Видалення старих бекапів з Яндекс.Діска для економії місця (налаштовується максимальна кількістьбекапів, що зберігаються);
— Запис та надсилання лога на e-mail (налаштовується).

Для того, щоб скористатися скриптом, необхідно спочатку отримати токен від Яндекс.Діска. Приступимо.

1. Логінем на Яндексі під акаунтом, на диск якого робитимемо бекап, заходимо на oauth.yandex.ru і натискаємо «Зареєструвати новий додаток».

2. Заповнюємо назву програми (наприклад, «backup») та видаємо потрібні права у розділі «Яндекс.Диск REST API», а саме: «Доступ до інформації про Диск» та «Доступ до папки програми на Диск».


Нижче на тій же сторінці під полем Callback URL натискаємо «підставити URL для розробки» і натискаємо «Зберегти»:


3. Після збереження параметрів програми нас перенаправлять на сторінку з даними про програму:


4. Тепер отримаємо сам токен (якщо хочете, можете почитати докладніше про це в мануалі Яндекса), для цього копіюємо ID, підставляємо в кінець URL https://oauth.yandex.ru/authorize?response_type=token&client_id= , переходимо за адресою та підтверджуємо видачу дозволів додатку:


У результаті на сторінці буде відображено токен, який видається не менше, ніж на 1 рік, тому якщо скрипт бекапа раптом перестане працювати, ми зможемо отримати новий токет та підставити його у скрипт. Протестувати можливості роботи з Яндекс.Диском, використовуючи отриманий токен, можна на спеціальному полігоні.

А тепер сам bash-скрипт для бекапа на Яндекс.Діск:

#!/bin/bash # # Yandex.Disk backup script v1.0 by Sergey Lukonin (neblog.info) # # # # # # # # # # # # НАЛАШТУВАННЯ БЕКАПА MYSQL # # # # # # # # # # # # # Сервер БД MYSQL_SERVER=mysql.some-server.ru # Користувач, під яким будемо робити бекап доступних баз, руту mysql зазвичай доступні всі БД, окремому користувачу зазвичай доступна БД конкретного проекту MYSQL_USER=some-user # Пароль користувача бази даних (Пароль від рута сервера і від рута mysql різні не плутайте) MYSQL_PASSWORD=some-password ########## Диску бекапів (0 - зберігати всі бекапи): MAX_BACKUPS="14" # Дата, використовується в іменах архівів DATE=`date "+%Y-%m-%d"` # Директорії для архівації (вказуються через пробіл), які будуть поміщені в єдиний архів і відправлені на Яндекс.Диск DIRS="/home/www/projects/neblog" # Yandex.Disk токен (як отримати - див. на neblog.info) дір векторії, вказаної в $BACKUP_DIR LOGFILE="backup.log" # E-mail для надсилання результату виконання скрипта. Залиште порожнім, якщо надсилати результати не потрібно. sendLog=" [email protected] " # Відправляти тільки помилки (true). Вкажіть false, якщо потрібно відправляти логи при будь-якому результаті виконання скрипта. # # # # # # # # # # ДАЛІ НІЧОГО НЕ МЕНЯЄМО! # # # # # # # # # # # function mailing() ( if [ ! ], якщо echo "$1" | grep -q "error" then echo "$2" | /dev/null fi fi ) function logger() ( echo "["`date "+%Y-%m-%d %H:%M:%S"`"] File $BACKUP_DIR: $1" >> $BACKUP_DIR /$LOGFILE ) function parseJson() ( local output regex="(\"$1\":[\"]?)([^\",\)]+)([\"]?)" [[ $2 = ~ $regex ]] && output=$(BASH_REMATCH) echo $output ) function checkError() ( echo $(parseJson "error" "$1") ) function getUploadUrl() ( json_out=`curl -s -H "Authorization: OAuth $TOKEN" https://cloud-api.yandex.net:443/v1/disk/resources/upload/?path=app:/$backupName&overwrite=true` json _error=$(checkError "$json_out") if [[ $json_error != "" ]]; then logger "$PROJECT - Yandex.Disk error: $json_error" mailing "$PROJECT - Yandex.Disk backup error" "ERROR copy file $FILENAME. Yandex.Disk error: $json_error" echo "" else output=$(parseJson " href" $json_out) echo $output fi ) function uploadFile ( local json_out local uploadUrl local json_error uploadUrl=$(getUploadUrl) if [[ $uploadUrl != "" ]]; then echo $UploadUrl json_ -H "Authorization: OAuth $TOKEN" $uploadUrl` json_error=$(checkError "$json_out") if [[ $json_error != "" ]]; then logger "$PROJECT - Yandex.Disk error: $json_error" mailing " $PROJECT - Yandex.Disk backup error" "ERROR copy file $FILENAME. Yandex.Disk error: $json_error" else logger "$PROJECT - Copying file to Yandex.Disk success" mailing "$PROJECT - Yandex.Disk backup success" " SUCCESS copy file $FILENAME" fi else echo "Одмінні помилки occured. : curl -s -H "Authorization: OAuth $TOKEN" "https://cloud-api.yandex.net:443/v1/disk/resources?path=app:/&sort=created&limit=100" | tr "()," "\n" | grep "name[[:graph:]]*.tar.gz" | cut -d: -f 2 | tr -d """ ) function backups_count() ( local bkps=$(backups_list | wc -l) # Якщо ми бекапимо і файли, і БД, то на 1 бекап у нас припадає 2 файли. Тому кількість бекапів = кількість файлів / 2: expr $bkps / 2 ) function remove_old_backups() ( bkps=$(backups_count) old_bkps=$((bkps - MAX_BACKUPS)) if [ "$old_bkps" -gt "0" ];then logger "Видаляємо старі бе . Диска" # Цикл видалення старих бекапів: # Виконуємо видалення першого у списку файлу 2*old_bkps раз for i in `eval echo (1..$((old_bkps * 2)))`; do curl -X DELETE -s -H " Authorization: OAuth $TOKEN" "https://cloud-api.yandex.net:443/v1/disk/resources?path=app:/$(backups_list | awk "(NR == 1)")&permanently=true" done fi ) logger "--- $PROJECT START BACKUP $DATE ---" logger "Вивантажуємо дампи баз" mkdir $BACKUP_DIR/$DATE for i in `mysql -h $MYSQL_SERVER -u $MYSQL_USER -p$MYSQL_PASSWORD -e" show databases;" | grep -v information_schema | grep -v Database`; $BACKUP_DIR/$DATE-mysql-$PROJECT.tar.gz" tar -czf $BACKUP_DIR/$DATE-mysql-$PROJECT.tar.gz $BACKUP_DIR/$DATE rm -rf $BACKUP_DIR/$DATE logger "Створюємо архів каталогів $BACKUP_DIR/$DATE-files-$PROJECT.tar.gz" tar -czf $BACKUP_DIR/$DATE-files-$PROJECT.tar.gz $DIRS FILENAME=$DATE-mysql-$PROJECT.tar.gz logger "Виграю на Яндекс.Диск архів mysql $BACKUP_DIR/$DATE-mysql-$PROJECT.tar.gz" backupName=$DATE-mysql-$PROJECT.tar.gz uploadFile $BACKUP_DIR/$DATE-mysql-$PROJECT.tar.gz FILENAME=$DATE-files-$PROJECT.tar.gz logger "Вивантажуємо на Яндекс.Диск архів із файлами $BACKUP_DIR/$DATE-files-$PROJECT.tar.gz" backupName=$DATE-files-$PROJECT.tar. gz uploadFile $BACKUP_DIR/$DATE-files-$PROJECT.tar.gz logger "Видаляємо архіви з диска" find $BACKUP_DIR -type f -name "*.gz" -exec rm "()" \; # Видаляємо старі бекапи з Яндекс.Діска (якщо MAX_BACKUPS > 0) if [ $MAX_BACKUPS -gt 0 ];then remove_old_backups; fi logger "Завершення скрипту бекапа"

Також ви можете завантажити готовий. Скрипт слід розташувати на сервері, замінити на ньому параметри на свої, дати права на запуск (chmod +x) і поставити на щоденне виконанняу cron. Якщо ви плануєте виконувати кілька таких завдань, встановіть час між їх запуском (5-10 хвилин).

Жорсткі диски